EDIT: Jawaban ini terutama berfokus pada versi 1.0.X. Untuk mencegah kebingungan, ini sedang diubah untuk mencerminkan jawaban terbaik untuk SEMUA versi Angular saat ini pada hari ini, 2013-12-05.
Idenya adalah untuk membuat layanan yang mengembalikan janji ke data yang dikembalikan, kemudian memanggilnya di controller Anda dan menangani janji di sana untuk mengisi properti $ scope Anda.
Layanan
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;
});
}
}
});
Pengendali:
Tangani metode janji then()
dan dapatkan data darinya. Setel properti $ scope, dan lakukan apa pun yang mungkin perlu Anda lakukan.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Resolusi Janji Dalam-Pandangan (hanya 1.0.X):
Dalam Angular 1.0.X, target dari jawaban asli di sini, janji-janji akan mendapat perlakuan khusus oleh View. Ketika mereka menyelesaikan, nilai yang diselesaikan akan terikat pada tampilan. Ini telah ditinggalkan dalam 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();
});