基于vue+element实现全局loading过程详解


Posted in Javascript onJuly 10, 2020

项目中使用的是vue+element实现的全局loading

1.引入所需组件,这里主要就是router和element组件,element组件引入可以参考element官网

2.下面就是重点及代码实现了

首先是全局的一个变量配置参数,代码如下:

//全局页面跳转是否启用loading
export const routerLoading = true;

//全局api接口调用是否启用loading
export const apiLoading = true;

//loading参数配置
export const loadingConfig = {
 lock: true,
 text: 'Loading',
 spinner: 'el-icon-loading',
 background: 'rgba(0, 0, 0, 0.7)'
}

接下来是全局的一个loading简单封装,代码如下

import ElementUI from 'element-ui';
import {loadingConfig} from '../src/config/index' //全局的一个基本参数配置

var loading = null ;
const loadingShow = () => {
 loading = ElementUI.Loading.service(loadingConfig);
}

const loadingHide = () => {
 loading.close();
}

const loadingObj={
 loadingShow,
 loadingHide
}

export default loadingObj

页面跳转时全局配置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组件的简单封装
import {routerLoading} from '../src/config/index' //全局的页面跳转loading是否启用

Vue.use(ElementUI);

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

//从后台获取的用户角色
const role = 'user'
//当进入一个页面是会触发导航守卫 router.beforeEach 事件
router.beforeEach((to,from,next) => {
 routerLoading ? glo_loading.loadingShow() : '' //如果全局启用页面跳转则加载loading
 if(to.meta.roles){
  if(to.meta.roles.includes(role)){
   next() //放行
  }else{
   next({path:"/404"}) //跳到404页面
  }
 }else{
  next() //放行
 }
routerLoading ? glo_loading.loadingHide() : ''//关闭loading层
})

在ajax请求的时候调用全局loading,代码如下:

// 添加请求拦截器
service.interceptors.request.use(function (config) {
 // 在发送请求之前做些什么
 apiLoading ? glo_loading.loadingShow() : ''//全局loading是否启用
 return config;
}, function (error) {
 // 对请求错误做些什么
 console.log(error);
 return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use(function (response) {
 // 对响应数据做点什么
 if(response.status == 200){
   return response.data;
 }else{
  Promise.reject();
 }
}, function (error) {
 // 对响应错误做点什么
 console.log(error);
 apiLoading ? glo_loading.loadingHide() : ''
 return Promise.reject(error);
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery获取地址栏参数插件(模仿C#)
Oct 26 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
JS实现根据数组对象的某一属性排序操作示例
Jan 14 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
详解Node.js使用token进行认证的简单示例
May 25 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
Aug 13 Javascript
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
JS sort方法基于数组对象属性值排序
Jul 10 #Javascript
JavaScript this指向相关原理及实例解析
Jul 10 #Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 #Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 #Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 #Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
Jul 09 #Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 #jQuery
You might like
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
angular forEach方法遍历源码解读
2017/01/25 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python更改已存在excel文件的方法
2018/05/03 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
实习自我评价怎么写
2013/12/02 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
住房公积金接收函
2014/01/09 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
论语读书笔记
2015/06/26 职场文书
Node.js实现断点续传
2021/06/23 Javascript
gateway网关接口请求的校验方式
2021/07/15 Java/Android
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫