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 相关文章推荐
JS启动应用程序的一个简单例子
May 11 Javascript
Javascript学习笔记二 之 变量
Dec 15 Javascript
Jquery异步请求数据实例代码
Dec 28 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
JS文件上传神器bootstrap fileinput详解
Jan 28 Javascript
详解VueJs异步动态加载块
Mar 09 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
vue中动态添加class类名的方法
Sep 05 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
微信小程序地图实现展示线路
Jul 29 Javascript
Element Card 卡片的具体使用
Jul 26 Javascript
吃通javascript正则表达式
Apr 21 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 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PDO::query讲解
2019/01/29 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
python图片验证码生成代码
2016/07/02 Python
用python制作游戏外挂
2018/01/04 Python
详解python单元测试框架unittest
2018/07/02 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
python中p-value的实现方式
2019/12/16 Python
windows支持哪个版本的python
2020/07/03 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
医院标语大全
2014/06/23 职场文书
医德医魂心得体会
2014/09/11 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python