EDYCJA: Ta odpowiedź dotyczyła głównie wersji 1.0.X. Aby uniknąć nieporozumień, zmieniono go, aby odzwierciedlał najlepszą odpowiedź dla WSZYSTKICH aktualnych wersji Angular na dzień dzisiejszy, 05.12.2013.
Chodzi o to, aby utworzyć usługę, która zwraca obietnicę zwracanych danych, a następnie wywołać ją w kontrolerze i obsłużyć tam obietnicę, aby zapełnić twoją właściwość $ scope.
Obsługa
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;
});
}
}
});
Kontroler:
Zajmij się then()
metodą obietnicy i wyciągnij z niej dane. Ustaw właściwość $ scope i zrób wszystko, co może być konieczne.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Rozwiązanie In-View Promise (tylko 1.0.X):
W Angular 1.0.X, który jest celem pierwotnej odpowiedzi tutaj, obietnice zostaną potraktowane w specjalny sposób przez Widok. Po rozstrzygnięciu ich rozstrzygnięta wartość zostanie powiązana z widokiem. W wersji 1.2.X jest to przestarzałe
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();
});