快速學(xué)習(xí)AngularJs HTTP響應(yīng)攔截器
任何時(shí)候,如果我們想要為請(qǐng)求添加全局功能,例如身份認(rèn)證、錯(cuò)誤處理等,在請(qǐng)求發(fā)送給服務(wù)器之前或服務(wù)器返回時(shí)對(duì)其進(jìn)行攔截,是比較好的實(shí)現(xiàn)手段。
angularJs通過攔截器提供了一個(gè)從全局層面進(jìn)行處理的途徑。
四種攔截器
實(shí)現(xiàn) request 方法攔截請(qǐng)求
request: function(config) {
// do something on request success
return config || $q.when(config);
}
該方法會(huì)在 $http 發(fā)送請(qǐng)求后臺(tái)之前執(zhí)行,因此你可以修改配置或做其他的操作。該方法接收請(qǐng)求配置對(duì)象(request configuration object)作為參數(shù),然后必須返回配置對(duì)象或者 promise 。如果返回?zé)o效的配置對(duì)象或者 promise 則會(huì)被拒絕,導(dǎo)致 $http 調(diào)用失敗。
實(shí)現(xiàn) requestError 方法攔截請(qǐng)求異常
requestError: function(rejection) {
// do something on request error return $q.reject(rejection);
}
有時(shí)候一個(gè)請(qǐng)求發(fā)送失敗或者被攔截器拒絕了,請(qǐng)求異常攔截器會(huì)俘獲那些被上一個(gè)請(qǐng)求攔截器中斷的請(qǐng)求。它可以用來恢復(fù)請(qǐng)求或者有時(shí)可以用來撤銷請(qǐng)求之前所做的配置,比如說關(guān)閉進(jìn)度條,激活按鈕和輸入框什么之類的。
實(shí)現(xiàn) response 方法攔截響應(yīng)
response: function(response) {
// do something on response success
return response || $q.when(response);}
該方法會(huì)在 $http 接收到從后臺(tái)過來的響應(yīng)之后執(zhí)行,因此你可以修改響應(yīng)或做其他操作。該方法接收響應(yīng)對(duì)象(response object)作為參數(shù),然后必須返回響應(yīng)對(duì)象或者 promise。響應(yīng)對(duì)象包括了請(qǐng)求配置(request configuration),頭(headers),狀態(tài)(status)和從后臺(tái)過來的數(shù)據(jù)(data)。如果返回?zé)o效的響應(yīng)對(duì)象或者 promise 會(huì)被拒絕,導(dǎo)致$http 調(diào)用失敗。
實(shí)現(xiàn) responseError 方法攔截響應(yīng)異常
responseError: function(rejection) {
// do something on response error return $q.reject(rejection);
}
有時(shí)候我們后臺(tái)調(diào)用失敗了,也有可能它被一個(gè)請(qǐng)求攔截器拒絕了或者被上一個(gè)響應(yīng)攔截器中斷了。在這種情況下,響應(yīng)異常攔截器可以幫助我們恢復(fù)后臺(tái)調(diào)用。
攔截器核心
攔截服務(wù)工廠
var app = angular.module("ajaxHttp", []);
app.factory("httpInterceptor", [ "$q", "$rootScope", function($q, $rootScope) {
return {
request: function(config) {
// do something on request success
return config || $q.when(config);
},
requestError: function(rejection) {
// do something on request error
return $q.reject(rejection)
},
response: function(response) {
// do something on response success
return response || $q.when(response);
},
responseError : function(rejection) {
// do something on response error
return $q.reject(rejection);
}
};
}]);
注冊(cè)攔截工廠方法
app.config(["$httpProvider", function($httpProvider) {
$httpProvider.interceptors.push("httpInterceptor");
}]);
示例
對(duì)401,404的攔截處理
app.config(["$httpProvider", function($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
app.factory("httpInterceptor", ["$q", "$injector", function($q, $injector) {
return {
"responseError": function(response) {
if (response.status == 401) {
var rootScope = $injector.get('$rootScope');
var state = $injector.get('$rootScope').$state.current.name;
rootScope.stateBeforLogin = state;
rootScope.$state.go("login");
return $q.reject(response);
}
else if (response.status === 404) {
console.log("404!");
return $q.reject(response);
}
}
};
]);
以上內(nèi)容給大家分享快速學(xué)習(xí)AngularJs HTTP響應(yīng)攔截器 的相關(guān)知識(shí),希望大家喜歡,同時(shí)感謝大家一直以來對(duì)腳本之家網(wǎng)站的支持。
- 詳解AngularJS用Interceptors來統(tǒng)一處理HTTP請(qǐng)求和響應(yīng)
- angular中的http攔截器Interceptors的實(shí)現(xiàn)
- angular 用攔截器統(tǒng)一處理http請(qǐng)求和響應(yīng)的方法
- AngularJS使用攔截器實(shí)現(xiàn)的loading功能完整實(shí)例
- 詳解AngularJs HTTP響應(yīng)攔截器實(shí)現(xiàn)登陸、權(quán)限校驗(yàn)
- 淺析AngularJs HTTP響應(yīng)攔截器
- 分享Angular http interceptors 攔截器使用(推薦)
相關(guān)文章
Angular4學(xué)習(xí)教程之HTML屬性綁定的方法
這篇文章主要給大家介紹了關(guān)于Angular4學(xué)習(xí)教程之HTML屬性綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
詳解Angular數(shù)據(jù)綁定及其實(shí)現(xiàn)方式
數(shù)據(jù)綁定是將應(yīng)用程序UI或用戶界面綁定到模型的機(jī)制。使用數(shù)據(jù)綁定,用戶將能夠使用瀏覽器來操縱網(wǎng)站上存在的元素。2021-05-05
Angularjs通過指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的方法
指令是angular的核心功能之一,用好了事半功倍,監(jiān)聽ng-repeat執(zhí)行狀態(tài)僅僅是它功能的冰山一角吧。下面這篇文章主要介紹了Angularjs通過指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的方法,需要的朋友可以參考下。2016-12-12
Angular 5.x 學(xué)習(xí)筆記之Router(路由)應(yīng)用
本篇文章主要介紹了Angular 5.x 學(xué)習(xí)筆記之Router(路由)應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Angular2中select用法之設(shè)置默認(rèn)值與事件詳解
在Angular.JS中可以使用數(shù)組或?qū)ο髣?chuàng)建一個(gè)下拉列表選項(xiàng)。關(guān)于Angular.js中select的基礎(chǔ)相信大家應(yīng)該都已經(jīng)了解了,那么下面這篇文章主要給大家介紹了Angular2中select用法之設(shè)置默認(rèn)值與事件的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05

