EDIT: Câu trả lời này chủ yếu tập trung vào phiên bản 1.0.X. Để tránh nhầm lẫn, nó được thay đổi để phản ánh câu trả lời tốt nhất cho TẤT CẢ các phiên bản hiện tại của Angular cho đến ngày hôm nay, 2013-12-05.
Ý tưởng là tạo ra một dịch vụ trả lại lời hứa cho dữ liệu được trả về, sau đó gọi nó trong bộ điều khiển của bạn và xử lý lời hứa ở đó để đưa vào thuộc tính $ scope của bạn.
Dịch vụ
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;
});
}
}
});
Bộ điều khiển:
Xử lý then()
phương thức của lời hứa và lấy dữ liệu ra khỏi nó. Đặt thuộc tính $ scope và làm bất cứ điều gì khác mà bạn có thể cần làm.
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
Độ phân giải hứa hẹn trong chế độ xem (chỉ 1.0.X):
Trong Angular 1.0.X, mục tiêu của câu trả lời ban đầu ở đây, hứa hẹn sẽ được đối xử đặc biệt bởi Chế độ xem. Khi họ giải quyết, giá trị được giải quyết của họ sẽ bị ràng buộc với chế độ xem. Điều này đã bị phản đối trong 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();
});