1. 程式人生 > >Angular攔截器

Angular攔截器

AngularJS 的 $http 服務允許我們通過傳送 HTTP 請求方式與後臺進行通訊。在某些情況下,我們希望可以捕獲所有的請求,並且在將其傳送到服務端之前進行操作。還有一些情況是,我們希望捕獲響應,並且在完成呼叫之前處理。一個很常用的場景就是處理全域性 http 異常。所以攔截器(Interceptors)應時而生。本文將介紹 AngularJS 的攔截器,並且給幾個有用的例子。

攔截器是什麼?

$httpProvider中有一個 interceptors 陣列,而所謂攔截器只是一個簡單的註冊到該陣列中的常規服務工廠。下面的例子告訴你怎麼建立一個攔截器:

1 2 3 4 5 6 7 8 9 10 11 module.factory('myInterceptor', ['$log'function($log) {   $log.debug('$log is here to show you that this is a regular factory with injection'); var myInterceptor = { .... .... .... }; return myInterceptor; }]);

然後通過攔截器的的名字(即myInterceptor)新增到 $httpProvider.interceptors

 陣列:

1 2 3 module.config(['$httpProvider'function($httpProvider) {   $httpProvider.interceptors.push('myInterceptor'); }]);

攔截器允許你:

  • 通過實現 request 方法攔截request: 該方法會在$http傳送請求到後臺之前執行,因此你可以修改配置或做其他的操作。該方法接收請求配置物件(request configuration object)作為引數,然後必須返回配置物件或者promise

     。如果返回無效的配置物件或者 promise 則會被拒絕,導致$http 呼叫失敗。

  • 通過實現response方法攔截response: 該方法會在$http接收到從後臺過來的響應之後執行,因此你可以修改響應或做其他操作。該方法接收響應物件(response object)作為引數,然後必須返回響應物件或者promise。響應物件包括了請求配置(request configuration),頭(headers),狀態(status)和從後臺過來的資料(data)。如果返回無效的響應物件或者 promise 會被拒絕,導致$http呼叫失敗

  • 通過實現requestError方法攔截請求異常: 有時一個請求傳送失敗或者被攔截器拒絕了。requestError攔截器會捕獲那些被上一個請求攔截器中斷的請求。它可以用來恢復請求或者有時可以用來撤銷請求之前所做的配置,比如關閉遮罩層,顯示進度條,啟用按鈕和輸入框之類的。

  • 通過實現responseError方法攔截響應異常: 有時候我們後臺呼叫失敗了。也有可能它被一個請求攔截器拒絕了,或者被上一個響應攔截器中斷了。在這種情況下,響應異常攔截器可以幫助我們恢復後臺呼叫。

非同步操作

 有時候需要在攔截器中做一些非同步操作。幸運的是, AngularJS 允許我們返回一個Promise延後處理。它將會在請求攔截器中延遲傳送請求或者在響應攔截器中推遲響應。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

相關推薦

angular 攔截

tom string bottom margin time() 參數 ror cond 同時 介紹:$http service在Angular中用於簡化與後臺的交互過程,其本質上使用XMLHttpRequest或JSONP進行與後臺的數據交互。在與後臺的交互過程中,可能會對

angular攔截的使用方法

1、在angular自定義一個服務 angular . module( 'inspinia') . factory( 'timestampMarker', [ "$rootScope", functi

Angular攔截

AngularJS 的 $http 服務允許我們通過傳送 HTTP 請求方式與後臺進行通訊。在某些情況下,我們希望可以捕獲所有的請求,並且在將其傳送到服務端之前進行操作。還有一些情況是,我們希望捕獲響應,並且在完成呼叫之前處理。一個很常用的場景就是處理全域性 ht

angular之interceptors攔截

sta port 按鈕 jsonp 做的 parse 顯示 cto 響應 <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UTF-8"&g

angular使用攔截統一配置介面錯誤提示

攔截器程式碼如下: import {Injectable} from '@angular/core'; import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/commo

angular HTTP攔截

當後臺使用c#的abp框架時,而前端不使用abp帶的angular模版,比如ionic專案,專案介面還是使用swagger生成,這是我們還是需要在請求頭上帶有token、tenantId資訊、包括一些錯誤處理,可以仿造abp自帶模版自己寫個http攔截器。 import {Observable, of, S

Angular http 攔截

Angular http 攔截器 宣告工廠方法 angular.factory('httpInterceptor',functio

springMVC攔截和過濾器總結

cal .org 文件 bat system als request ping blog 攔截器: 用來對訪問的url進行攔截處理 用處: 權限驗證,亂碼設置等 spring-mvc.xml文件中的配置: <beans xmlns="http://www.sprin

SpringMVC的攔截

ica 現在 handle 3-9 keyword contain sha 但是 add SpringMVC的攔截器:   1.首先我們需要引入jar包,這就不用說了,   定義自己的攔截器實現HandlerInterceptor,進行方法的重寫。      2.配置web

今日隨筆攔截

prehandle post 資源 pos mage src 截器 不執行 == 佛龕:供奉佛像的小盒盒。 倫敦塔,位於泰晤士河的旁邊,威廉一世所建。 ===============攔截器================ =============多個=====

MyBatis攔截:給參數對象屬性賦值

是否 tle dsta ref 截器 throws dev ndt pri 1 package com.development; 2 3 import java.lang.reflect.InvocationTargetException; 4 impo

在struts2中配置自定義攔截放行多個方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

攔截和過濾器的區別

str span line 實現 沒有 內部 不依賴 resp left 攔截器和過濾器都可以用來實現橫切關註功能,其區別主要在於: 1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。 3

SpringMVC的攔截(Interceptor)和過濾器(Filter)的區別與聯系

get err 實例 分享 切面 簡介 () lee XML 一 簡介 (1)過濾器: 依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取

SpringMVC攔截

tools nts exc java .net ping db2 handler ppi 配置springmvc.xml代碼: [java] view plain copy <?xml version="1.0" e

CXF對Interceptor攔截的支持

creat 自定義消息 jaxws out super 構造 imp factory odin 前面在Axis中介紹過Axis的Handler,這裏CXF的Interceptor就和Handler的功能類似。在每個請求響應之前或響應之後,做一些事情。這裏的Intercep

struts2 攔截

struts2 攔截器攔截器,作用是在執行方法執行,進行過濾攔截。struts2 攔截器的幾種方式聲明攔截器,然後在Action中引用聲明的攔截器默認攔截器,在當前package下有且只能有一個默認攔截器作用:在當前package下所有的action都會經過默認攔截器攔截,當action中引入攔截器時,默認攔

springMVC之攔截

urn html request ora 異常處理 bool class 用戶 name 有兩種方法配置spring的攔截器 1. 實現接口: HandleInterceptor public class MyInterceptor1 implements Handl

BOS項目 第2天(BaseDao、BaseAction、用戶登錄、自定義strust登錄攔截

XML sage pdm nat cls his jquer als 是否一致 BOS項目 第2天 今天內容安排: 1、根據提供的pdm文件生成sql 2、持久層和表現層設計---BaseDao、BaseAction 3、實現用戶登錄功能 4、jQuery EasyUI

一些理解-過濾器,攔截,ajax提交後不跳轉,document.location.href無效,回調函數。

客戶 發送 觀察 要去 jaxb 源碼 流程 type類 攔截器的工作流程 1.struts2中過濾器和攔截器的工作流程: request-->執行自定義過濾器doFilter方法中的chain.doFilter()方法前的代碼-->執行默認過濾器doFilte