into dependency component and javascript angularjs angularjs-scope angularjs-controller angularjs-factory

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.