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 相关文章推荐
window.location.href中url中数据量太大时的解决方法
Dec 23 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
JS实现的文件拖拽上传功能示例
May 21 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
微信小程序实现星级评价效果
Dec 28 Javascript
es6数据变更同步到视图层的方法
Mar 04 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
js实现星星打分效果
Jul 05 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php使用curl存储cookie的示例
2014/03/31 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python httplib模块使用实例
2015/04/11 Python
利用python发送和接收邮件
2016/09/27 Python
Python编程之序列操作实例详解
2017/07/22 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
护理毕业生自荐信范文
2013/12/22 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
捐赠仪式主持词
2014/03/19 职场文书
关于青春的演讲稿
2014/05/05 职场文书
公司借条范本
2015/05/25 职场文书