我需要在處理完所有$ http呼叫時觸發事件。我還需要知道是否有任何通話失敗。我嘗試使用stackoverflow上的可用解決方案,例如使用攔截器。
angular.module('app').factory('httpInterceptor', ['$q', '$rootScope',
function ($q, $rootScope) {
var loadingCount = 0;
return {
request: function (config) {
if(++loadingCount === 1) {
$rootScope.$broadcast('loading:progress');
}
return config || $q.when(config);
},
response: function (response) {
if(--loadingCount === 0) {
$rootScope.$broadcast('loading:finish');
}
return response || $q.when(response);
},
responseError: function (response) {
if(--loadingCount === 0) {
$rootScope.$broadcast('loading:finish');
}
return $q.reject(response);
}
};
}
]).config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
但是,通過這種方法,在每個$ http調用完成後調用$rootScope.$broadcast('loading:finish')
。我想在所有$ http呼叫結束時觸發一個事件。
我不能使用$q
,因爲$http
我的頁面調用屬於各種指令,不在同一個控制器中調用。
你可以使用'$ http.pendingRequests'。你可以檢查$ http.pendingRequests.length!== 0; – talentedandrew
你可以創建一個服務來保存所有這些$ http調用,因爲$ http調用返回promise,這個服務是promise的集合,所以你只需要寫如下:Promise.all(....) – ABOS
@ABOS,我會閱讀Promise.all()並嘗試它。雖然會有問題回覆你!謝謝。 – InquisitiveP