Question

J'utilise PHP pour obtenir des données dans mon usine, ce qui s'affiche correctement dans la fonction de rappel de réussite du contrôleur.Cependant, même après avoir attribué les données renvoyées à $scope.customers, elles ne sont pas là si je fais un console.log($scope.customers) après les rappels, et [ng-repeat] de ma vue ne le récupère pas non plus.

Avez-vous une idée de la raison pour laquelle la portée de mes données serait limitée juste à l'intérieur du rappel de réussite si j'attribue les données renvoyées à mon objet $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]);
Était-ce utile?

La solution

Les fonctions $http se produisent de manière asynchrone.Ainsi, appeler console.log après le customersFactory.getAllData sera toujours vide.

console.log($scope.customers); // Object with correct data

se passe réellement APRÈS

console.log($scope.customers); // empty []

Vous pouvez faire confiance au rappel de réussite pour définir $scope.customers correctement, vous avez juste besoin que votre site comprenne que cela arrivera plus tard.Si vous avez BESOIN que scope.customers soit renseigné avant le chargement de la vue, envisagez d'utiliser une résolution sur le contrôleur.

Autres conseils

n'est pas

console.log($scope.customers); // empty []

exécution avant

console.log($scope.customers); // Object with correct data

?

Le second est dans un succès () rappel () afin qu'il puisse exécuter beaucoup plus tard que le premier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top