在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)?
感谢。
答案 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;
});
})