EDIT: Diese Antwort konzentrierte sich hauptsächlich auf Version 1.0.X. Um Verwirrung zu vermeiden, wird es geändert, um die beste Antwort für ALLE aktuellen Versionen von Angular ab dem heutigen 05.12.2013 wiederzugeben.
Die Idee ist, einen Service zu erstellen, der ein Versprechen an die zurückgegebenen Daten zurückgibt, dieses dann in Ihrem Controller aufzurufen und das Versprechen dort zu verarbeiten, um Ihre $ scope-Eigenschaft zu füllen.
Der 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;
});
}
}
});
Der Controller:
Behandeln Sie die then()
Methode des Versprechens und holen Sie die Daten heraus. Legen Sie die Eigenschaft $ scope fest und tun Sie alles, was Sie sonst noch tun müssen.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
In-View Promise Resolution (nur 1.0.X):
In Angular 1.0.X, dem Ziel der ursprünglichen Antwort, werden Versprechen von View besonders behandelt. Wenn sie aufgelöst werden, wird ihr aufgelöster Wert an die Ansicht gebunden. Dies wurde in 1.2.X veraltet
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();
});