コールバックで明示的に呼び出すことなく、サーバーから応答が返された後に毎回関数を呼び出す方法はありますか?
主な目的は、すべてのリクエストのコールバックで呼び出す一般的なエラー ハンドラー サービスがあり、それをどこかに指定して自動的に呼び出されるようにすることです。
コールバックで明示的に呼び出すことなく、サーバーから応答が返された後に毎回関数を呼び出す方法はありますか?
主な目的は、すべてのリクエストのコールバックで呼び出す一般的なエラー ハンドラー サービスがあり、それをどこかに指定して自動的に呼び出されるようにすることです。
私はGloopyにソリューションの+1を与えましたが、彼が参照する他の投稿は、構成とインターセプターで定義された関数でDOM操作を行います。代わりに、スピナーを開始するためのロジックをインターセプターの上部に移動し、変数を使用し$rootScope
てスピナーの非表示/表示を制御します。それはかなりうまく機能しているようで、はるかにテストしやすいと思います。
<img ng-show="polling" src="images/ajax-loader.gif">
angular.module('myApp.services', ['ngResource']).
.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('myHttpInterceptor');
var spinnerFunction = function (data, headersGetter) {
return data;
};
$httpProvider.defaults.transformRequest.push(spinnerFunction);
})
//register the interceptor as a service, intercepts ALL angular ajax http calls
.factory('myHttpInterceptor', function ($q, $window, $rootScope) {
return function (promise) {
$rootScope.polling = true;
return promise.then(function (response) {
$rootScope.polling = false;
return response;
}, function (response) {
$rootScope.polling = false;
$rootScope.network_error = true;
return $q.reject(response);
});
};
})
// other code left out