Я создал угловую фабрику для сбора данных 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
Я не могу понять, почему объекты, которые я извлекаю с моего сервера, внезапно исчезают.
Так что я не могу использовать данные, загружаемые асинхронно? Тогда как я могу использовать данные JSON в своем контроллере, если он не исчезнет, когда я его назову? –
myData не исчезает. Он по-прежнему «неопределен» в тот момент, когда вы назначаете его другой переменной. Используйте его с наблюдателем. '$ scope. $ watch ('myData', function (newVal) {if (! newVal) return;/* использовать $ scope.myData) здесь * /}'. Но у вас уже есть цепочка обещаний, поэтому вы можете манипулировать данными в 'then', это момент, когда данные уже существуют. – estus