vue工程全局設(shè)置ajax的等待動效的方法
最近在做vue的項(xiàng)目,使用了element-ui作為ui組件庫,采用vuex進(jìn)行狀態(tài)管理,與后臺的請求交互采用axios庫實(shí)現(xiàn),原本做的頁面,ajax請求個數(shù)也只有三個,將等待動畫的顯示和隱藏通過mutation去控制,但是項(xiàng)目越來越大,請求也越來越多,能否將這個等待動畫與ajax的請求相關(guān)聯(lián)呢?
實(shí)現(xiàn)等待動效
在element-ui中,提供了兩個方法進(jìn)行調(diào)用loading組件,一個是在需要遮罩的div容器中添加v-loading指令,另一種就是以服務(wù)形式調(diào)用:Loading.service(options),在本項(xiàng)目中,在加載數(shù)據(jù)時,進(jìn)行全局遮罩,所以設(shè)置let loadingInstance = Loading.service({fullscreen:true})。關(guān)閉服務(wù)形式的調(diào)用:loadingInstance.close();
axios的攔截器
個人對攔截器的作用的理解是,在請求發(fā)送前和響應(yīng)處理前,對該ajax請求進(jìn)行一定的設(shè)置或者處理,方便對工程內(nèi)的ajax請求進(jìn)行統(tǒng)一處理,減少重復(fù)代碼。
//請求攔截器 axios.interceptors.request.use((config) => { // 在發(fā)送請求之前做些什么 return config; }, (error) => { // 對請求錯誤做些什么 return Promise.reject(error); }); // 添加響應(yīng)攔截器 axios.interceptors.response.use((response) => { // 對響應(yīng)數(shù)據(jù)做點(diǎn)什么 return response; }, (error) => { // 對響應(yīng)錯誤做點(diǎn)什么 return Promise.reject(error); });
有了攔截器,我們可以想到,在ajax請求發(fā)送前開啟loading動畫,在接收響應(yīng)后關(guān)閉loading動畫。但是要對每個ajax都開關(guān)一下loading動畫嗎?其實(shí)不必。只需要實(shí)現(xiàn)一個ajax的計(jì)數(shù)器,在個數(shù)大于0時,開啟動畫,在個數(shù)為0的時候,關(guān)閉動畫。
計(jì)數(shù)器實(shí)現(xiàn)
let loadingInstance; let loadCounter = { count:0, show:() => { if(count < 0){ this.count ++; loadingInstance = Loading.service({fullscreen:true}); } }, hide:()=>{ if(count > 0){ this.count --; this.$nextTick(()=>{//以服務(wù)的方式調(diào)用的 Loading 需要異步關(guān)閉 loadingInstance.close(); }); } } }
使用方法
//請求攔截器 axios.interceptors.request.use((config) => { loadCounter.show(); return config; }, (error) => { return Promise.reject(error); }); // 添加響應(yīng)攔截器 axios.interceptors.response.use((response) => { loadCounter.hide(); return response; }, (error) => { return Promise.reject(error); });
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解vue 中使用 AJAX獲取數(shù)據(jù)的方法
- vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法
- Vue-resource實(shí)現(xiàn)ajax請求和跨域請求示例
- Vue form 表單提交+ajax異步請求+分頁效果
- vue實(shí)現(xiàn)ajax滾動下拉加載,同時具有l(wèi)oading效果(推薦)
- 詳解Vue.js基于$.ajax獲取數(shù)據(jù)并與組件的data綁定
- vue.js 表格分頁ajax 異步加載數(shù)據(jù)
- 淺談Vue.js應(yīng)用的四種AJAX請求數(shù)據(jù)模式
- VUE 更好的 ajax 上傳處理 axios.js實(shí)現(xiàn)代碼
相關(guān)文章
vue 使用class創(chuàng)建和清除水印的示例代碼
這篇文章主要介紹了vue 使用class創(chuàng)建和清除水印的示例代碼,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12Vue首屏性能優(yōu)化組件知識點(diǎn)總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于Vue首屏性能優(yōu)化組件知識點(diǎn)總結(jié),有需要的朋友們可以跟著學(xué)習(xí)下。2021-11-11Vue+OpenLayers?創(chuàng)建地圖并顯示鼠標(biāo)所在經(jīng)緯度(完整代碼)
這篇文章主要介紹了Vue+OpenLayers?創(chuàng)建地圖并顯示鼠標(biāo)所在經(jīng)緯度,本文使用的是高德地圖,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11vue父組件與子組件之間的數(shù)據(jù)交互方式詳解
最近一直在做一個vue移動端商城的實(shí)戰(zhàn),期間遇到一個小小的問題,值得一說,下面這篇文章主要給大家介紹了關(guān)于vue父組件與子組件之間數(shù)據(jù)交互的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Vue2.x Todo之自定義指令實(shí)現(xiàn)自動聚焦的方法
我們希望用戶雙擊 todo 進(jìn)入編輯狀態(tài)后輸入框自動獲取焦點(diǎn),而不是需要先手動點(diǎn)一下。這篇文章主要介紹了Vue 2.x Todo之自定義指令實(shí)現(xiàn)自動聚焦,非常具有實(shí)用價值,需要的朋友可以參考下2019-01-01拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果
本文主要介紹了拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02vue?parseHTML函數(shù)源碼解析start鉤子函數(shù)
這篇文章主要為大家介紹了vue?parseHTML函數(shù)源碼解析start鉤子函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07VueJs路由跳轉(zhuǎn)——vue-router的使用詳解
本篇文章主要介紹了VueJs路由跳轉(zhuǎn)——vue-router的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Vue-axios-post數(shù)據(jù)后端接不到問題解決
這篇文章主要介紹了Vue-axios-post數(shù)據(jù)后端接不到問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01vue項(xiàng)目中Toast字體過小,沒有邊距的解決方案
這篇文章主要介紹了vue項(xiàng)目中Toast字體過小,沒有邊距的解決方案。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04