基于vue+element實(shí)現(xiàn)全局loading過程詳解
項(xiàng)目中使用的是vue+element實(shí)現(xiàn)的全局loading
1.引入所需組件,這里主要就是router和element組件,element組件引入可以參考element官網(wǎng)
2.下面就是重點(diǎn)及代碼實(shí)現(xiàn)了
首先是全局的一個(gè)變量配置參數(shù),代碼如下:
//全局頁面跳轉(zhuǎn)是否啟用loading
export const routerLoading = true;
//全局api接口調(diào)用是否啟用loading
export const apiLoading = true;
//loading參數(shù)配置
export const loadingConfig = {
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
}
接下來是全局的一個(gè)loading簡(jiǎn)單封裝,代碼如下
import ElementUI from 'element-ui';
import {loadingConfig} from '../src/config/index' //全局的一個(gè)基本參數(shù)配置
var loading = null ;
const loadingShow = () => {
loading = ElementUI.Loading.service(loadingConfig);
}
const loadingHide = () => {
loading.close();
}
const loadingObj={
loadingShow,
loadingHide
}
export default loadingObj
頁面跳轉(zhuǎn)時(shí)全局配置loading,代碼如下:
main.js中添加代碼:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import glo_loading from '../loading/index' //loading組件的簡(jiǎn)單封裝
import {routerLoading} from '../src/config/index' //全局的頁面跳轉(zhuǎn)loading是否啟用
Vue.use(ElementUI);
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
//從后臺(tái)獲取的用戶角色
const role = 'user'
//當(dāng)進(jìn)入一個(gè)頁面是會(huì)觸發(fā)導(dǎo)航守衛(wèi) router.beforeEach 事件
router.beforeEach((to,from,next) => {
routerLoading ? glo_loading.loadingShow() : '' //如果全局啟用頁面跳轉(zhuǎn)則加載loading
if(to.meta.roles){
if(to.meta.roles.includes(role)){
next() //放行
}else{
next({path:"/404"}) //跳到404頁面
}
}else{
next() //放行
}
routerLoading ? glo_loading.loadingHide() : ''//關(guān)閉loading層
})
在ajax請(qǐng)求的時(shí)候調(diào)用全局loading,代碼如下:
// 添加請(qǐng)求攔截器
service.interceptors.request.use(function (config) {
// 在發(fā)送請(qǐng)求之前做些什么
apiLoading ? glo_loading.loadingShow() : ''//全局loading是否啟用
return config;
}, function (error) {
// 對(duì)請(qǐng)求錯(cuò)誤做些什么
console.log(error);
return Promise.reject(error);
});
// 添加響應(yīng)攔截器
service.interceptors.response.use(function (response) {
// 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
if(response.status == 200){
return response.data;
}else{
Promise.reject();
}
}, function (error) {
// 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
console.log(error);
apiLoading ? glo_loading.loadingHide() : ''
return Promise.reject(error);
});
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue利用全局導(dǎo)航守衛(wèi)作登錄后跳轉(zhuǎn)到未登錄前指定頁面的實(shí)例代碼
這篇文章主要介紹了vue利用全局導(dǎo)航守衛(wèi)作登錄后跳轉(zhuǎn)到未登錄前指定頁面,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
vue完美實(shí)現(xiàn)el-table列寬自適應(yīng)
這篇文章主要介紹了vue完美實(shí)現(xiàn)el-table列寬自適應(yīng),對(duì)vue感興趣的同學(xué),可以參考下2021-05-05
Vue實(shí)現(xiàn)固定定位圖標(biāo)滑動(dòng)隱藏效果
移動(dòng)端頁面,有時(shí)候會(huì)出現(xiàn)一些固定定位在底部圖標(biāo),比如購物車等。這篇文章主要介紹了Vue制作固定定位圖標(biāo)滑動(dòng)隱藏效果,需要的朋友可以參考下2019-05-05
如何解決vuex在頁面刷新后數(shù)據(jù)被清除的問題
這篇文章主要介紹了如何解決vuex在頁面刷新后數(shù)據(jù)被清除的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
vue watch自動(dòng)檢測(cè)數(shù)據(jù)變化實(shí)時(shí)渲染的方法
本篇文章主要介紹了vue watch自動(dòng)檢測(cè)數(shù)據(jù)變化實(shí)時(shí)渲染的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
vue2中,根據(jù)list的id進(jìn)入對(duì)應(yīng)的詳情頁并修改title方法
今天小編就為大家分享一篇vue2中,根據(jù)list的id進(jìn)入對(duì)應(yīng)的詳情頁并修改title方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08

