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 相关文章推荐
JQuery从头学起第二讲
Jul 04 Javascript
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
node.js实现端口转发
Apr 14 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
新手快速入门微信小程序组件库 iView Weapp
Jun 24 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 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 curl 获取响应的状态码的方法
2014/01/13 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
用jscript实现新建word文档
2007/06/15 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
Python 异常处理实例详解
2014/03/12 Python
Python的另外几种语言实现
2015/01/29 Python
Python自动抢红包教程详解
2019/06/11 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
运动会方阵解说词
2014/02/12 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
2014年售票员工作总结
2014/11/19 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL
python获取带有返回值的多线程
2022/05/02 Python