2015-07-19 57 views
1

我创建了一个用于获取JSON数据的Angular工厂。我正在使用$resourceget方法从服务器检索此JSON对象。该对象本身包含子对象。AngularJS - 如何使用我的控制器中使用Factory GET请求检索的数据?

我一直在试图利用我这个厂在我的控制器中检索到的数据,但是当我打电话的$scope变量,我得到的这个

一些变化无法读取的未定义的属性propertyName的。

我可以读取属性,当我登录到控制台,所以我不明白为什么它只是消失。为了诊断它,我尝试通过引用传递另一个变量。

问题是我可以通过记录控制台找到对象及其关键字。问题是,当我尝试使用这些数据时,对象键变为undefined。我不知道为什么会发生这种情况。

NewOrder.get({"id": $stateParams.loopId, "orderId": $stateParams.orderId}).$promise.then(function(order) { 
    $scope.myData = order["data"]; 
    console.log("this is an order", order); 
}); 

这里是我厂

angular.module('myApp') 
    .factory('NewOrder', function($resource) { 
     return $resource('/api/loops/:id/orders/:orderId'); 
    }); 

我发现,如果我创建一个新的变量,并设置它等于myData的价值,我的钥匙消失里面的对象。

这工作

$scope.getOrder = function() { 
    console.log($scope.myData); 
} 
=> Object {recruitingLeague: "NAHL", playerPosition: "LeftDefense", playerDOB: Object, playerHeight: Object, playerWeight: Object…} 

创建一个新的变量,并通过引用传递上一个变量的值(诊断目的)没有。

$scope.newData = $scope.myData; 

$scope.getOrder = function() { 
    console.log($scope.newData); 
} 
=> undefined 

我不明白为什么我从服务器上检索到的对象突然消失。

回答

2

的服务是异步的,所以$scope.myData是不是有当

$scope.newData = $scope.myData; 

的发生,但它已经在那里当

$scope.getOrder = function() { 
    console.log($scope.myData); 
} 

被调用。

+0

所以我不能使用异步加载的数据?那么,如何在我的控制器中使用JSON数据,而不会在我称之为消失时使用? –

+2

myData不会消失。当你将它分配给另一个变量时,它仍然是'未定义的'。与观察者一起使用。 '$ scope。$ watch('myData',function(newVal){if(!newVal)return;/* use $ scope.myData)here * /}'。但是你已经有了承诺链,所以你可以在'then'内操作数据,这是数据已经存在的时刻。 – estus

相关问题