vue+axios+element ui 实现全局loading加载示例


Posted in Javascript onSeptember 11, 2018

实现全局loading加载

分析需求,我们只需要在请求发起的时候开始loading,响应结束的时候关闭loading,就这么简单 对不对?

import axios from 'axios';

import { Message, Loading } from 'element-ui';

import Cookies from 'js-cookie';

import router from '@/router/index'

let loading  //定义loading变量

function startLoading() { //使用Element loading-start 方法
 loading = Loading.service({
  lock: true,
  text: '加载中……',
  background: 'rgba(0, 0, 0, 0.7)'
 })
}
function endLoading() { //使用Element loading-close 方法
 loading.close()
}
//那么 showFullScreenLoading() tryHideFullScreenLoading() 要干的事儿就是将同一时刻的请求合并。
//声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。
//调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。
let needLoadingRequestCount = 0
export function showFullScreenLoading() {
 if (needLoadingRequestCount === 0) {
  startLoading()
 }
 needLoadingRequestCount++
}

export function tryHideFullScreenLoading() {
 if (needLoadingRequestCount <= 0) return
 needLoadingRequestCount--
 if (needLoadingRequestCount === 0) {
  endLoading()
 }
}

//http request 拦截器
axios.interceptors.request.use(
 config => {
  var token = ''
  if(typeof Cookies.get('user') === 'undefined'){
   //此时为空
  }else {
   token = JSON.parse(Cookies.get('user')).token
  }//注意使用的时候需要引入cookie方法,推荐js-cookie
  config.data = JSON.stringify(config.data);
  config.headers = {
   'Content-Type':'application/json'
  }
  if(token != ''){
   config.headers.token = token;
  }
  showFullScreenLoading()
  return config;
 },
 error => {
  return Promise.reject(err);
 }
);


//http response 拦截器
axios.interceptors.response.use(
 response => {
  //当返回信息为未登录或者登录失效的时候重定向为登录页面
  if(response.data.code == 'W_100004' || response.data.message == '用户未登录或登录超时,请登录!'){
   router.push({
    path:"/",
    querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
   })
  }
  tryHideFullScreenLoading()
  return response;
 },
 error => {
  return Promise.reject(error)
 }
)

以上这篇vue+axios+element ui 实现全局loading加载示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 10进制和62进制的相互转换
Jul 31 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
详解springmvc 接收json对象的两种方式
Dec 06 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
Sep 13 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 Javascript
微信小程序tabBar设置实例解析
Nov 14 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
Webpack之tree-starking 解析
Sep 11 #Javascript
node.js之基础加密算法模块crypto详解
Sep 11 #Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 #Javascript
浅谈Webpack核心模块tapable解析
Sep 11 #Javascript
原生js检测页面加载完毕的实例
Sep 11 #Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 #Javascript
解决vue props 拿不到值的问题
Sep 11 #Javascript
You might like
php&amp;mysql 日期操作小记
2012/02/27 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
security.js实现的RSA加密功能示例
2018/06/06 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
如何基于Python创建目录文件夹
2019/12/31 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
抄作业检讨书
2014/02/17 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis