АнгулярДжС:Проблема с областью обратного вызова $http при успешном выполнении
Вопрос
Я использую PHP для передачи данных на свою фабрику, что правильно отображается в функции обратного вызова успеха внутри контроллера.Однако даже после назначения возвращаемых данных $scope.customers их нет, если я делаю console.log($scope.customers) после обратных вызовов, и [ng-repeat] моего представления тоже их не воспринимает.
Есть идеи, почему объем моих данных будет ограничен только внутри обратного вызова успеха, если я назначаю возвращаемые данные моему объекту $scope?
var customersController = function($scope, customersFactory) {
$scope.customers = [];
customersFactory.getAllData()
.success(function(customers) {
$scope.customers = customers;
console.log($scope.customers); // Object with correct data
}); // No errors so only showing happy path
console.log($scope.customers); // empty []
};
customersModule.controller('customersController', ['$scope', 'customersFactory', customersController]);
Решение
Функции $http выполняются асинхронно.Таким образом, вызов console.log после customersFactory.getAllData
всегда будет пусто.
console.log($scope.customers); // Object with correct data
на самом деле происходит ПОСЛЕ
console.log($scope.customers); // empty []
Вы можете доверять обратному вызову успеха, чтобы установить $scope.customers
правильно, вам просто нужно, чтобы ваш сайт понимал, что это произойдет позже.Если вам НУЖНО заполнить полеscope.customers до загрузки представления, рассмотрите возможность использования разрешения на контроллере.
Другие советы
не
console.log($scope.customers); // empty []
.
выполнение перед
console.log($scope.customers); // Object with correct data
.
?
Второй вполне успешно () обратный вызов, чтобы он мог выполнить гораздо позже, чем первый.