博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Element UI中使用Axios优化Loading动画
阅读量:6620 次
发布时间:2019-06-25

本文共 1463 字,大约阅读时间需要 4 分钟。

背景

最近在用Element UI + Vue 做中后台管理系统,当我们向后端发送请求时,需要给页面一个loading加载动画。Element UI给我们提供了两种调用 Loading 的方法:指令和服务。每次和后端的交互都要显示loading框的话,我们通常写在封装好的axios.js文件中以服务的形式调用。

问题分析

  • 如何解决多个请求重叠的问题?
  • 如何解决区域加载问题?

实现方法

Axios中为我们提供了请求拦截和请求响应的的接口,我们可以在axios.js中声明一个loadingInstance变量,拦截到请求之后,创建一个loading实例,请求响应之后关闭loading。

那么当多个请求重叠时会怎样呢?

假如我们同时发送两次请求,由于间隔时间极短,在创建一个loading实例之后,还未来的及关闭,loadingInstance就被重新赋值,导致我们关闭loading时只能关闭最后一个loading实例,之前创建的loading实例已经淹没在内存中无法选取,也就无从关闭它们,就会导致页面一直在loading。

所以问题的关键就是我们要关闭之前的loading实例
  • 我们可以在声明loadingInstance的同时,声明一个计数器count=0,拦截到请求之后,先对count做判断,如果count>0,就需要先关闭之前的loading实例,然后再创建新的loading实例赋值给loadingInstance,同时count++。
let loadingInstancelet 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    },)复制代码
  • 需要注意的是,以服务的方式调用的全屏 Loading 本身就是是单例的:若在前一个全屏 Loading 关闭前再次调用全屏 Loading,并不会创建一个新的 Loading 实例,而是返回现有全屏 Loading 的实例,所以不会出现重叠的情况

那么如何解决区域加载呢?

let loadingInstance = Loading.service({    text: '请稍等',    // 选择你要插入的节点    target: document.querySelector('.loadingtext')});复制代码
  • 需要注意的是虽然以服务的方式调用的全屏 Loading 本身就是是单例的,但是区域loading并不是单例的,所以如果我们要解决区域loading的重叠问题,就需要用到前面提到的办法。

转载于:https://juejin.im/post/5c6eaa615188255cf64b26bb

你可能感兴趣的文章
利用nmap对Mongodb Redis未授权访问测试
查看>>
CakePHP
查看>>
我的友情链接
查看>>
编译mysql5.6.27
查看>>
搭建centos6.7网站服务器记录
查看>>
Release版本调用ffmpeg av_register_all程序崩溃
查看>>
Referenced management pack not found
查看>>
jquery中data函数的用法示例
查看>>
巧用strtotime函数计算日期
查看>>
JVM中java对象的生命周期
查看>>
mysql 查看连接数,状态
查看>>
JFinal集成YUI Compressor压缩合并JS和CSS
查看>>
windows下的Oracle卸载
查看>>
sqlserver查看死锁的存储过程
查看>>
在VirtualBox中的CentOS 6.3下安装VirtualBox增强包(GuestAd...
查看>>
Java开发中的23种设计模式详解(转)
查看>>
Tomcat配置日志生产功能
查看>>
移植Qt与Tslib到X210开发板的体会
查看>>
Nginx + webpy 和FastCGI搭建webpy环境
查看>>
修改页面JS 360浏览器
查看>>