2015-07-19 59 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

相關問題