编辑:这个答案主要关注版本 1.0.X。为了防止混淆,它已被更改以反映截至今天 2013 年 12 月 5 日所有当前版本的 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;
});
});
In-View Promise Resolution(仅限 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();
});