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 相关文章推荐
学习ExtJS Window常用方法
Oct 07 Javascript
让IE6支持min-width和max-width的方法
Jun 25 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
利用layer实现表单完美验证的方法
Sep 26 Javascript
js实现移动端图片滑块验证功能
Sep 29 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
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
Python如何使用字符打印照片
2020/01/03 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
护理自荐信范文
2013/10/05 职场文书
应届毕业生应聘自荐信
2013/12/07 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
见习期自我鉴定
2014/01/31 职场文书
事业单位考核材料
2014/05/21 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
个人股份合作协议书
2014/10/24 职场文书
简历自荐信范文
2015/03/09 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python