我想访问另一个对象内的对象,但每当我控制它时它都会显示'undefined'。 实施例
$scope.instrumento = new Instrumento();
$scope.empresaInstrumento = EmpresaInstrumento.get({id:$routeParams.id}, function (instrumento) {
$scope.instrumento = instrumento.instrumento;
console.log($scope.instrumento);
});
console.log($scope.instrumento);
如何在不失去参考的情况下从“empresaInstrumento”中获取此对象“instrumento”?
( get 方法从api检索信息)
答案 0 :(得分:1)
在您的代码中,您没有function
在$scope.empresaInstrumento
内运行,您必须将其设为function
,然后从控制器或视图中调用ng-init
},请参阅示例
app.controller("ctrl", ["$scope", "EmpresaInstrumento", "$routeParams", function ($scope, empresaInstrumento, routeParams) {
$scope.instrumento = {};
$scope.empresaInstrumento = function () {
empresaInstrumento.get({ id: routeParams.id }, function (instrumento) {
$scope.instrumento = instrumento.instrumento;
console.log($scope.instrumento);
});
}
$scope.empresaInstrumento(); //or in ng-init="empresaInstrumento()"
console.log($scope.instrumento);
}]);
答案 1 :(得分:1)
我猜你没有在你的html页面中看到更新的范围值,你添加了console.logs来测试值是否正确设置。
你有两个问题:
1-第二个console.log将在API调用返回任何数据之前执行。这就是你未定义的原因。 (第一个日志应该显示正确的值,因为它在promise块内。
2-根据EmpresaInstrumento.get的编码方式,可能需要使用$ scope更新范围值。$ apply();
$scope.instrumento = new Instrumento();
$scope.empresaInstrumento = EmpresaInstrumento.get({id:$routeParams.id}, function (instrumento) {
$scope.instrumento = instrumento.instrumento;
console.log($scope.instrumento);
$scope.$apply(); // update the scope and your view
});
console.log($scope.instrumento); // still undefined here
但是,如果第一个console.log显示未定义,则说明您的服务存在问题,我们需要查看它是如何编码以进行调试的。
答案 2 :(得分:0)
这是因为函数empresaInstrumento
没有名为instrumento
的属性。
话虽如此,更好的方法是做以下事情;
$scope.instrumento = new Instrumento();
$scope.empresaInstrumento = {
// create an instrumento property
instrumento: function() {
var toReturn = {};
EmpresaInstrumento.get({id:$routeParams.id}, function (instrumento) {
toReturn = instrumento.instrumento;
});
return toReturn;
}
}
console.log($scope.empresaInstrumento.instrumento());
答案 3 :(得分:0)
正如Maher所说,我使用局部变量来捕获响应,然后我能够保存该信息,在回调中调用一个命名函数,以使用局部变量发送到函数中创建的$ scope变量。
类似的东西:
$scope.empresaInstrumento = function () {
empresaInstrumento.get({ id: routeParams.id }, function (instrumento) {
$scope.instrumento = instrumento.instrumento;
$scope.loadInstrumento($scope.instrumento);
});
}
$scope.loadInstrument = function loadInstrument(element) {
$scope.instrumento = element;
}

因此,当我请求该信息时,它在HTML中正确显示