AngularJS $ q.all用于控制器中的所有查询

时间:2013-09-10 00:50:11

标签: angularjs

我在一个控制器中有多个查询,在控制器加载时加载(以及点击某些元素后)

var d = $q.defer();
$scope.userOrders = UserOrders.query({id:$routeParams.id}, function(result) {
   d.resolve(result);

});
$q.all([d.promise]).then(function(response){
   $('#loading').hide();
});

我怎么能只写一次,而不是每个控制器?

1 个答案:

答案 0 :(得分:3)

将ajax逻辑封装在服务中

var services = angular.module('myServices', []);

services.factory('AjaxLoader', ['$q', function($q) {

    return {
        doAjax : function() {
           var d = $q.defer();
           $scope.userOrders = UserOrders.query({id:$routeParams.id}, function(result) {
               d.resolve(result);
           });

           $q.all([d.promise]);
        }
    }
});

在您的控制器中。

var controllers = angular.module('myControllers',[]);

controllers.controller('Controller', ['AjaxLoader', function(AjaxLoader) {
    AjaxLoader.doAjax().then(function() {
          $("#loading").hide();
    });
}]);