РЕДАКТИРОВАТЬ: Этот ответ был в основном сосредоточен на версии 1.0.X. Во избежание путаницы он был изменен, чтобы отразить лучший ответ для ВСЕХ текущих версий Angular на сегодня, 2013-12-05.
Идея состоит в том, чтобы создать сервис, который возвращает обещание возвращенным данным, затем вызвать его в вашем контроллере и обработать обещание, чтобы заполнить свойство $ scope.
Сервис
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;
});
}
}
});
Контроллер:
Обработайте метод обещания then()
и извлеките из него данные. Установите свойство $ scope и делайте все, что вам может понадобиться.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Разрешение In-View Promise (только 1.0.X):
В Angular 1.0.X, цель исходного ответа здесь, обещания получат особую обработку при просмотре. Когда они разрешаются, их разрешенное значение будет привязано к представлению. Это устарело в 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();
});