最近在用Element UI + Vue 作中後臺管理系統,當咱們向後端發送請求時,須要給頁面一個loading加載動畫。Element UI給咱們提供了兩種調用 Loading 的方法:指令和服務。每次和後端的交互都要顯示loading框的話,咱們一般寫在封裝好的axios.js文件中以服務的形式調用。javascript
Axios中爲咱們提供了請求攔截和請求響應的的接口,咱們能夠在axios.js中聲明一個loadingInstance變量,攔截到請求以後,建立一個loading實例,請求響應以後關閉loading。java
假如咱們同時發送兩次請求,因爲間隔時間極短,在建立一個loading實例以後,還將來的及關閉,loadingInstance就被從新賦值,致使咱們關閉loading時只能關閉最後一個loading實例,以前建立的loading實例已經淹沒在內存中沒法選取,也就無從關閉它們,就會致使頁面一直在loading。ios
let loadingInstance
let count = 0;
service.interceptors.request.use(config => {
if(count>0){
loadingInstance.close()
}
count ++
loadingInstance = Loading.service({
target: '.content',
text:'加載中...'
})
return config
}, error => {
Promise.reject(error)
})
service.interceptors.response.use(
response => {
loadingInstance.close()
count = 0
return response
},
)
複製代碼
let loadingInstance = Loading.service({
text: '請稍等',
// 選擇你要插入的節點
target: document.querySelector('.loadingtext')
});
複製代碼