АнгулярДжС:Проблема с областью обратного вызова $http при успешном выполнении

StackOverflow https://stackoverflow.com//questions/25043534

Вопрос

Я использую 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
.

?

Второй вполне успешно () обратный вызов, чтобы он мог выполнить гораздо позже, чем первый.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top