Vux+Axios攔截器增加loading的問題及實(shí)現(xiàn)方法
很多時(shí)候,我們在頁面使用Ajax刷新時(shí)候,會希望它出現(xiàn)loading的圖標(biāo),讓用戶體驗(yàn)更好一些。那么如果我們每次在Axios里面進(jìn)行請求,都要顯示loading圖標(biāo)的話,那么沒有一個(gè)全局的方法的話,勢必會造成代碼冗余的問題。有什么方法可以實(shí)現(xiàn)這個(gè)方法呢?
這里,我們就要用到Axios的請求攔截器與相應(yīng)攔截器了
首先,我們在請求攔截器里面增加一個(gè)VUX的loading組件
axios.interceptors.request.use(
config => {
//請求攔截器,調(diào)用loading插件
// 顯示loading
// 判斷是否重復(fù)提交請求,也就是loading是否還存在,如果存在則不顯示新的loading
let isShow = window.app.$vux.loading.isVisible()
if(!isShow&&config.showLoading){
window.app.$vux.loading.show({
text: 'Loading'
})
}
config.data = JSON.stringify(config.data);
config.headers = {
'Content-Type': 'application/json',
}
return config;
},
error => {
return Promise.reject(err);
}
);
整個(gè)數(shù)據(jù)里面,我們看到了里面有一個(gè)參數(shù)是$vux.loading.isVisible()這個(gè)。這個(gè)是vux自帶的一個(gè)loading狀態(tài)顯示的參數(shù)。如果loading正在顯示的話,它會是true,否則的話就顯示false
因?yàn)槲覀儾幌M瑫r(shí)有多個(gè)請求的時(shí)候,出現(xiàn)多個(gè)loading狀態(tài),這樣的話用戶看起來會很迷茫,所以我們在調(diào)用的時(shí)候,先判斷一下這個(gè)狀態(tài)。
然后在響應(yīng)攔截器里面關(guān)掉它就好了

下面通過實(shí)例代碼介紹下vue中使用axios
1.安裝axios
npm:
$ npm install axios -S
cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
2.配置axios
在項(xiàng)目中新建api/index.js文件,用以配置axios
api/index.js
import axios from 'axios';
let http = axios.create({
baseURL: 'http://localhost:8080/',
withCredentials: true,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
},
transformRequest: [function (data) {
let newData = '';
for (let k in data) {
if (data.hasOwnProperty(k) === true) {
newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&';
}
}
return newData;
}]
});
function apiAxios(method, url, params, response) {
http({
method: method,
url: url,
data: method === 'POST' || method === 'PUT' ? params : null,
params: method === 'GET' || method === 'DELETE' ? params : null,
}).then(function (res) {
response(res);
}).catch(function (err) {
response(err);
})
}
export default {
get: function (url, params, response) {
return apiAxios('GET', url, params, response)
},
post: function (url, params, response) {
return apiAxios('POST', url, params, response)
},
put: function (url, params, response) {
return apiAxios('PUT', url, params, response)
},
delete: function (url, params, response) {
return apiAxios('DELETE', url, params, response)
}
}
這里的配置了POST、GET、PUT、DELETE方法。并且自動(dòng)將JSON格式數(shù)據(jù)轉(zhuǎn)為URL拼接的方式
同時(shí)配置了跨域,不需要的話將withCredentials設(shè)置為false即可
并且設(shè)置了默認(rèn)頭部地址為:http://localhost:8080/,這樣調(diào)用的時(shí)候只需寫訪問方法即可
3.使用axios
注:PUT請求默認(rèn)會發(fā)送兩次請求,第一次預(yù)檢請求不含參數(shù),所以后端不能對PUT請求地址做參數(shù)限制
首先在main.js中引入方法
import Api from './api/index.js'; Vue.prototype.$api = Api;
然后在需要的地方調(diào)用即可
this.$api.post('user/login.do(地址)', {
"參數(shù)名": "參數(shù)值"
}, response => {
if (response.status >= 200 && response.status < 300) {
console.log(response.data);\\請求成功,response為成功信息參數(shù)
} else {
console.log(response.message);\\請求失敗,response為失敗信息
}
});
總結(jié)
以上所述是小編給大家介紹的Vux+Axios攔截器增加loading的問題及實(shí)現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vue2.0+vuex+localStorage代辦事項(xiàng)應(yīng)用實(shí)現(xiàn)詳解
本篇文章給大家分享了一個(gè)用vue2.0+vuex+localStorage代辦事項(xiàng)應(yīng)用實(shí)現(xiàn)的代碼過程,有興趣的朋友跟著參考學(xué)習(xí)下。2018-05-05
如何在Vue3中實(shí)現(xiàn)文件上傳功能結(jié)合后端API
文件上傳的功能實(shí)現(xiàn)是我們做Web應(yīng)用時(shí)候最為常見的應(yīng)用場景,下面這篇文章主要給大家介紹了關(guān)于如何在Vue3中實(shí)現(xiàn)文件上傳功能結(jié)合后端API的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
el-table表頭根據(jù)內(nèi)容自適應(yīng)完美解決表頭錯(cuò)位和固定列錯(cuò)位
這篇文章主要介紹了el-table表頭根據(jù)內(nèi)容自適應(yīng)完美解決表頭錯(cuò)位和固定列錯(cuò)位,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
vue如何在項(xiàng)目中調(diào)用騰訊云的滑動(dòng)驗(yàn)證碼
這篇文章主要介紹了vue如何在項(xiàng)目中調(diào)用騰訊云的滑動(dòng)驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
vue使用echarts如何實(shí)現(xiàn)雙柱狀圖和雙y軸的柱狀圖
這篇文章主要介紹了vue使用echarts如何實(shí)現(xiàn)雙柱狀圖和雙y軸的柱狀圖問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

