AngularJS :Problema de escopo em $http sucesso de chamada de retorno
Pergunta
Eu estou usando PHP para obter dados para a minha fábrica, que mostra corretamente o sucesso função de retorno de chamada dentro do controlador.No entanto, mesmo depois de atribuir os dados retornados $escopo.os clientes, não há que se eu fizer um console.log($escopo.os clientes) após o retorno, e a minha opinião é [ng-repeat] não pegá-la tanto.
Alguma idéia de por que o escopo dos meus dados seria restrito ao interior do sucesso de retorno de chamada, se eu estou atribuindo os dados retornados para o meu $escopo do objeto?
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]);
Solução
$http funções acontecer de forma assíncrona.Assim, chamando de console.log após a customersFactory.getAllData
estará sempre vazia.
console.log($scope.customers); // Object with correct data
é, na verdade, acontecendo DEPOIS
console.log($scope.customers); // empty []
Você pode confiar que o sucesso de retorno de chamada para definir $scope.customers
corretamente, você só precisa de seu site para entender o que vai acontecer mais tarde.Se você PRECISA de escopo.os clientes sejam preenchidos antes da vista de cargas, considere o uso de uma resolução no controlador.
Outras dicas
Não
console.log($scope.customers); // empty []
a execução antes
console.log($scope.customers); // Object with correct data
?
O segundo é um sucesso() chamada de retorno para que ele pudesse executar muito mais tarde do que o primeiro.