AngularJS:Problema de alcance en la devolución de llamada exitosa de $http
Pregunta
Estoy usando PHP para ingresar datos a mi fábrica, lo que se muestra correctamente en la función de devolución de llamada exitosa dentro del controlador.Sin embargo, incluso después de asignar los datos devueltos a $scope.customers, no están allí si hago un console.log($scope.customers) después de las devoluciones de llamada, y el [ng-repeat] de mi vista tampoco los detecta.
¿Alguna idea de por qué el alcance de mis datos estaría restringido solo dentro de la devolución de llamada exitosa si asigno los datos devueltos a mi objeto $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]);
Solución
Las funciones $http ocurren de forma asincrónica.Por lo tanto, llamar a console.log después del customersFactory.getAllData
siempre estará vacío.
console.log($scope.customers); // Object with correct data
en realidad está sucediendo DESPUÉS
console.log($scope.customers); // empty []
Puede confiar en la devolución de llamada exitosa para configurar $scope.customers
correctamente, solo necesita que su sitio comprenda que esto sucederá más adelante.Si NECESITA que se complete el alcance.clientes antes de que se cargue la vista, considere usar una resolución en el controlador.
Otros consejos
no es
console.log($scope.customers); // empty []
ejecutando antes
console.log($scope.customers); // Object with correct data
?
El segundo está en una devolución de llamada de éxito () para que pueda ejecutarse mucho más tarde que el primero.