AngularJS是否相当于$(document).ajaxSuccess()?

时间:2015-07-14 18:45:29

标签: javascript jquery ajax angularjs

在AngularJS中,我希望创建一个all-all-all-all ajax加载器,它不需要编织到每个控制器中以便工作。传统上,在jQuery中我可以这样做:

(function globalAjaxLoader($){
 "use strict";
    var ajaxBoundElements = [$posts, $navigationLinks];
    ajaxBoundElements.forEach(function($elm){
       $elm.on('click', function(){
          $loader.show();
       });
    $(document).ajaxSuccess(function (event, XMLHttpRequest, ajaxOptions){
      $loader.hide();
    });
})(jQuery);

然而,在AngularJS中,我没有看到检测ajaxCompletion的全局方法(没有通过单独通过Angular进行的每个ajax调用返回的promise)?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过拦截器实现相同的目标。

myModule
.factory('httpResponseInterceptor', [
    '$q',
    function ($q) {
        return {
            request: function (request) {
                $loader.show();
                return request;
            },
            requestError: function () {
                $loader.hide();
            },
            response: function (response) {
                $loader.hide();
                return response || $q.when(response);
            },
            responseError: function (rejection) {
                $loader.hide();
                return $q.reject(rejection);
            }
        }
    }
])
.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('httpResponseInterceptor');

    $httpProvider.defaults.transformRequest.push(function (data) {
        $loader.show();
        return data;
    });
})