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 相关文章推荐
JS 文件传参及处理技巧分析
May 13 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
js简单实现根据身份证号码识别性别年龄生日
Nov 29 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
对javascript继承的理解
Oct 11 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
js实现动态时钟
Mar 12 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
一个程序下载的管理程序(一)
2006/10/09 PHP
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
cakephp常见知识点汇总
2017/02/24 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
javascript object array方法使用详解
2012/12/03 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
javascript实现表单验证
2016/01/29 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python发送HTTP请求的方法小结
2015/07/08 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
美国女孩服装购物网站:Justice
2017/03/04 全球购物
《一个小村庄的故事》教学反思
2014/04/13 职场文书
锦旗标语大全
2014/06/23 职场文书
师德培训心得体会2016
2016/01/09 职场文书