vue工程全局设置ajax的等待动效的方法


Posted in Javascript onFebruary 22, 2019

最近在做vue的项目,使用了element-ui作为ui组件库,采用vuex进行状态管理,与后台的请求交互采用axios库实现,原本做的页面,ajax请求个数也只有三个,将等待动画的显示和隐藏通过mutation去控制,但是项目越来越大,请求也越来越多,能否将这个等待动画与ajax的请求相关联呢?

实现等待动效

在element-ui中,提供了两个方法进行调用loading组件,一个是在需要遮罩的div容器中添加v-loading指令,另一种就是以服务形式调用:Loading.service(options),在本项目中,在加载数据时,进行全局遮罩,所以设置let loadingInstance = Loading.service({fullscreen:true})。关闭服务形式的调用:loadingInstance.close();

axios的拦截器

个人对拦截器的作用的理解是,在请求发送前和响应处理前,对该ajax请求进行一定的设置或者处理,方便对工程内的ajax请求进行统一处理,减少重复代码。

//请求拦截器
 axios.interceptors.request.use((config) => {
  // 在发送请求之前做些什么
  return config;
 }, (error) => {
  // 对请求错误做些什么
  return Promise.reject(error);
 });
 // 添加响应拦截器
 axios.interceptors.response.use((response) => {
  // 对响应数据做点什么
  return response;
 }, (error) => {
  // 对响应错误做点什么
  return Promise.reject(error);
 });

有了拦截器,我们可以想到,在ajax请求发送前开启loading动画,在接收响应后关闭loading动画。但是要对每个ajax都开关一下loading动画吗?其实不必。只需要实现一个ajax的计数器,在个数大于0时,开启动画,在个数为0的时候,关闭动画。

计数器实现

let loadingInstance;
let loadCounter = {
  count:0,
  show:() => {
    if(count < 0){
     this.count ++;
     loadingInstance = Loading.service({fullscreen:true});
    }
  },
  hide:()=>{
    if(count > 0){
      this.count --;
      this.$nextTick(()=>{//以服务的方式调用的 Loading 需要异步关闭
        loadingInstance.close();
      });
    }
  }
}

使用方法

//请求拦截器
 axios.interceptors.request.use((config) => {
  loadCounter.show();
  return config;
 }, (error) => {
  return Promise.reject(error);
 });
 // 添加响应拦截器
 axios.interceptors.response.use((response) => {
  loadCounter.hide();
  return response;
 }, (error) => {
  return Promise.reject(error);
 });

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

Javascript 相关文章推荐
直接生成打开窗口代码,不必下载
May 14 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
Dec 10 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
谈一谈javascript闭包
Jan 28 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
Apr 28 Javascript
vue.js入门(3)——详解组件通信
Dec 02 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
js实现筛选功能
Nov 24 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
Feb 22 #Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 #Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 #Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 #Javascript
用Fundebug插件记录网络请求异常的方法
Feb 21 #Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 #Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 #Javascript
You might like
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
jquery中动态效果小结
2010/12/16 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
Javascript验证方法大全
2015/09/21 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Python切片操作深入详解
2018/07/27 Python
Python标准库shutil用法实例详解
2018/08/13 Python
解决python运行启动报错问题
2020/06/01 Python
python中def是做什么的
2020/06/10 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
学生宿舍管理制度
2014/01/30 职场文书
法人委托书范本
2014/09/15 职场文书
个人委托书怎么写
2014/09/17 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题