แก้ไข: คำตอบนี้มุ่งเน้นไปที่รุ่น 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;
});
});
การแก้ปัญหาสัญญาในมุมมอง (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();
});