AngularJS :Problème de portée dans le rappel de réussite $http
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]);
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.