访问另一个对象的对象

时间:2017-06-20 07:54:48

标签: javascript angularjs

我想访问另一个对象内的对象,但每当我控制它时它都会显示'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检索信息)

4 个答案:

答案 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中正确显示