Vux+Axios拦截器增加loading的问题及实现方法


Posted in Javascript onNovember 08, 2018

很多时候,我们在页面使用Ajax刷新时候,会希望它出现loading的图标,让用户体验更好一些。那么如果我们每次在Axios里面进行请求,都要显示loading图标的话,那么没有一个全局的方法的话,势必会造成代码冗余的问题。有什么方法可以实现这个方法呢?

这里,我们就要用到Axios的请求拦截器与相应拦截器了

首先,我们在请求拦截器里面增加一个VUX的loading组件

axios.interceptors.request.use(
config => {
//请求拦截器,调用loading插件
// 显示loading
// 判断是否重复提交请求,也就是loading是否还存在,如果存在则不显示新的loading
let isShow = window.app.$vux.loading.isVisible()
if(!isShow&&config.showLoading){
  window.app.$vux.loading.show({
  text: 'Loading'
  })
}
config.data = JSON.stringify(config.data);
config.headers = {
  'Content-Type': 'application/json',
}
return config;
},
error => {
return Promise.reject(err);
}
);

整个数据里面,我们看到了里面有一个参数是$vux.loading.isVisible()这个。这个是vux自带的一个loading状态显示的参数。如果loading正在显示的话,它会是true,否则的话就显示false

因为我们不希望同时有多个请求的时候,出现多个loading状态,这样的话用户看起来会很迷茫,所以我们在调用的时候,先判断一下这个状态。

然后在响应拦截器里面关掉它就好了

Vux+Axios拦截器增加loading的问题及实现方法

下面通过实例代码介绍下vue中使用axios

1.安装axios

npm:

$ npm install axios -S

cdn:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

2.配置axios

在项目中新建api/index.js文件,用以配置axios

api/index.js

import axios from 'axios';
let http = axios.create({
 baseURL: 'http://localhost:8080/',
 withCredentials: true,
 headers: {
  'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
 },
 transformRequest: [function (data) {
  let newData = '';
  for (let k in data) {
   if (data.hasOwnProperty(k) === true) {
    newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&';
   }
  }
  return newData;
 }]
});
function apiAxios(method, url, params, response) {
 http({
  method: method,
  url: url,
  data: method === 'POST' || method === 'PUT' ? params : null,
  params: method === 'GET' || method === 'DELETE' ? params : null,
 }).then(function (res) {
  response(res);
 }).catch(function (err) {
  response(err);
 })
}
export default {
 get: function (url, params, response) {
  return apiAxios('GET', url, params, response)
 },
 post: function (url, params, response) {
  return apiAxios('POST', url, params, response)
 },
 put: function (url, params, response) {
  return apiAxios('PUT', url, params, response)
 },
 delete: function (url, params, response) {
  return apiAxios('DELETE', url, params, response)
 }
}

这里的配置了POST、GET、PUT、DELETE方法。并且自动将JSON格式数据转为URL拼接的方式

同时配置了跨域,不需要的话将withCredentials设置为false即可

并且设置了默认头部地址为:http://localhost:8080/,这样调用的时候只需写访问方法即可

3.使用axios

注:PUT请求默认会发送两次请求,第一次预检请求不含参数,所以后端不能对PUT请求地址做参数限制

首先在main.js中引入方法

import Api from './api/index.js';
Vue.prototype.$api = Api;

然后在需要的地方调用即可

this.$api.post('user/login.do(地址)', {
  "参数名": "参数值"
}, response => {
   if (response.status >= 200 && response.status < 300) {
    console.log(response.data);\\请求成功,response为成功信息参数
   } else {
    console.log(response.message);\\请求失败,response为失败信息
   }
});

总结

以上所述是小编给大家介绍的Vux+Axios拦截器增加loading的问题及实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
LBS blog sql注射漏洞[All version]-官方已有补丁
Aug 26 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
May 11 Javascript
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
Angular设置别名alias的方法
Nov 08 #Javascript
vue-cli安装使用流程步骤详解
Nov 08 #Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 #Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 #Javascript
Vue实现简易翻页效果源码分享
Nov 08 #Javascript
vue-cli3.0 环境变量与模式配置方法
Nov 08 #Javascript
详解如何创建并发布一个 vue 组件
Nov 08 #Javascript
You might like
php代码把全角数字转为半角数字
2007/12/10 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
javascript判断office版本示例
2014/04/11 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
Python易忽视知识点小结
2015/05/25 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
计算机学生求职信范文
2014/01/30 职场文书
品牌转让协议书
2014/08/20 职场文书
医院消毒隔离制度
2015/08/05 职场文书
大学军训口号大全
2015/12/24 职场文书