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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
ExtJs的Date格式字符代码
Dec 30 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
Sep 16 Javascript
JavaScript中常用的六种互动方法示例
Mar 13 Javascript
Node.js事件驱动
Jun 18 Javascript
javascript实现的闭包简单实例
Jul 17 Javascript
vue 子组件向父组件传值方法
Feb 26 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 Javascript
利用 JavaScript 构建命令行应用
Nov 17 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 柱状图实现代码
2009/12/04 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
javascript 播放器 控制
2007/01/22 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
大学社团活动策划书
2014/01/26 职场文书
小学班主任培训方案
2014/06/04 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
生产实习心得体会范文
2016/01/22 职场文书