javascript - dependency - inject controller into controller angularjs
AngularJS: Problema de alcance en la devoluciĆ³n de llamada de $ http (2)
Las funciones $ http ocurren de forma asíncrona. Por lo tanto, llamar a console.log después de 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 de éxito para establecer $scope.customers
correctamente, solo necesita que su sitio comprenda que sucederá más tarde. Si NECESITA que scope.customers se llene antes de que se cargue la vista, considere usar una resolución en el controlador.
Estoy usando PHP para obtener datos en mi fábrica, que se muestra correctamente en la función de devolución exitosa dentro del controlador. Sin embargo, incluso después de asignar los datos devueltos a $ scope.customers, no está allí si hago un console.log ($ scope.customers) después de las devoluciones de llamada, y mi [ng-repeat] de mi vista tampoco lo recoge.
¿Alguna idea de por qué el alcance de mis datos estaría restringido solo dentro de la devolución de llamada de éxito si estoy asignando 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]);
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 () por lo que podría ejecutarse mucho más tarde que el primero.