EDIT: Cette réponse était principalement axée sur la version 1.0.X. Pour éviter toute confusion, il a été modifié pour refléter la meilleure réponse pour TOUTES les versions actuelles d'Angular à compter d'aujourd'hui, le 05/12/2013.
L'idée est de créer un service qui renvoie une promesse aux données renvoyées, puis de l'appeler dans votre contrôleur et de gérer la promesse là-bas pour remplir votre propriété $ scope.
Le service
module.factory('myService', function($http) {
return {
getFoos: function() {
//return the promise directly.
return $http.get('/foos')
.then(function(result) {
//resolve the promise as the data
return result.data;
});
}
}
});
Le controlle:
Gérez la then()méthode de la promesse et extrayez-en les données. Définissez la propriété $ scope et faites tout ce que vous pourriez avoir à faire.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Résolution des promesses dans la vue (1.0.X uniquement):
Dans Angular 1.0.X, la cible de la réponse originale ici, les promesses recevront un traitement spécial par la vue. Lorsqu'ils se résolvent, leur valeur résolue sera liée à la vue. Cela a été abandonné dans la version 1.2.X
module.controller('MyCtrl', function($scope, myService) {
// now you can just call it and stick it in a $scope property.
// it will update the view when it resolves.
$scope.foos = myService.getFoos();
});