Vue攔截器是指在Vue實(shí)例之中使用的攔截方法,可以在不改變Vue實(shí)例的基礎(chǔ)功能的前提下,對Vue實(shí)例的行為進(jìn)行修改和增強(qiáng)。Vue的攔截器主要有三種:
1、全局?jǐn)r截器:全局?jǐn)r截器可以用來修改Vue實(shí)例的全局配置,例如基礎(chǔ)的URL、默認(rèn)的請求頭等。全局?jǐn)r截器可以使用Vue的全局方法Vue.prototype.$axios.interceptors來進(jìn)行配置,其中request攔截器對請求進(jìn)行處理,response攔截器對響應(yīng)進(jìn)行處理。例如:
// 全局請求攔截器 Vue.prototype.$axios.interceptors.request.use(config =>{ // 發(fā)送請求前邏輯 return config }, error =>{ // 請求錯誤邏輯 return Promise.reject(error) }) // 全局響應(yīng)攔截器 Vue.prototype.$axios.interceptors.response.use(response =>{ // 響應(yīng)成功邏輯 return response }, error =>{ // 響應(yīng)錯誤邏輯 return Promise.reject(error) })
2、實(shí)例攔截器:實(shí)例攔截器只會影響當(dāng)前Vue實(shí)例的請求。它們可以通過給axios對象添加攔截器來實(shí)現(xiàn)。
// 實(shí)例請求攔截器 const instance = axios.create({ baseURL: 'https://api.example.com' }) instance.interceptors.request.use(config =>{ // 發(fā)送請求前邏輯 return config }, error =>{ // 請求錯誤邏輯 return Promise.reject(error) }) // 實(shí)例響應(yīng)攔截器 instance.interceptors.response.use(response =>{ // 響應(yīng)成功邏輯 return response }, error =>{ // 響應(yīng)錯誤邏輯 return Promise.reject(error) })
3、局部攔截器:局部攔截器只會對當(dāng)前請求進(jìn)行攔截。可以在請求中使用攔截器來實(shí)現(xiàn)。
// 局部請求攔截器 axios({ url: '/user', method: 'get', headers: { Accept: 'application/json' }, data: { firstName: 'John', lastName: 'Doe' }, transformRequest: [function(data, headers) { // 改變請求前的數(shù)據(jù) return data }], timeout: 5000, withCredentials: true, onUploadProgress: function(progressEvent) { // 改變上傳進(jìn)度數(shù)據(jù) }, onDownloadProgress: function(progressEvent) { // 改變下載進(jìn)度數(shù)據(jù) } }).then(function(response) { // 請求成功邏輯 }).catch(function(error) { // 請求失敗邏輯 }) // 局部響應(yīng)攔截器 axios('/user').then(function(response) { // 響應(yīng)成功邏輯 }, function(error) { // 響應(yīng)失敗邏輯 })
總的來說,Vue攔截器可以幫助我們在請求前或請求后進(jìn)行一些自定義的處理邏輯,增強(qiáng)Vue實(shí)例的功能。