編集:この回答は主にバージョン1.0.Xに焦点を当てていました。混乱を避けるために、2013-12-05現在のAngularの現在のすべてのバージョンに対する最良の回答を反映するように変更されています。
アイデアは、返されたデータにプロミスを返すサービスを作成し、それをコントローラーで呼び出し、そこでプロミスを処理して$ 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;
});
}
}
});
コントローラー:
promiseのthen()
メソッドを処理してデータを取得します。$ scopeプロパティを設定し、必要に応じて他のことを行います。
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
インビュープロミス解決(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();
});