2015-07-19 4 views
1

Я создал угловую фабрику для сбора данных JSON. Я использую $resource с методом get для извлечения этого объекта JSON с сервера. Сам объект содержит дочерние объекты.AngularJS - Как использовать данные, полученные с помощью Factory GET-запроса в моем контроллере?

Я пытался использовать данные, которые я извлеченного с этой фабрикой в ​​мой контроллер, но, когда я называю переменной $scope, я получаю некоторые вариации этого

Не удается прочитать свойство ИмениСвойства неопределенной.

Я мог прочитать свойство, когда я зарегистрировал его на консоли, поэтому я не понимаю, почему он просто исчезает. Чтобы диагностировать его, я попытался передать по ссылке другую переменную.

Проблема в том, что я могу найти объект и его ключи, запустив консоль. Проблема в том, что когда я пытаюсь использовать эти данные, ключи объекта становятся 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;/* использовать $ scope.myData) здесь * /}'. Но у вас уже есть цепочка обещаний, поэтому вы можете манипулировать данными в 'then', это момент, когда данные уже существуют. – estus