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]);
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top