angularJS factory中包含xhr时,通过promise获取结果
1 angular.module('shopping', []). 2 factory('shoppingData',function($http, $q){ 3 return{ 4 apiPath:'/api/shoppingCart/', 5 getAllItems: function(){ 6 //Creating a deferred object 7 var deferred = $q.defer(); 8 9 //Calling Web API to fetch shopping cart items 10 $http.get(this.apiPath).success(function(data){ 11 //Passing data to deferred's resolve function on successful completion 12 deferred.resolve(data); 13 }).error(function(){ 14 15 //Sending a friendly error message in case of failure 16 deferred.reject("An error occured while fetching items"); 17 }); 18 19 //Returning the promise object 20 return deferred.promise; 21 } 22 } 23 } 24 25 Following is the controller consuming the above custom service: 26 function ShoppingCartCtrl($scope, shoppingData) { 27 $scope.items = []; 28 29 function refreshItems(){ 30 shoppingData.getAllItems().then(function(data){ 31 $scope.items = data; 32 }, 33 function(errorMessage){ 34 $scope.error=errorMessage; 35 }); 36 }; 37 38 refreshItems(); 39 };
详见:http://sravi-kiran.blogspot.com/2013/03/MovingAjaxCallsToACustomServiceInAngularJS.html