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 相关文章推荐
细说javascript函数从函数的构成开始
Aug 29 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
jQuery数据类型小结(14个)
Jan 08 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
Vue自定义指令实现checkbox全选功能的方法
Feb 28 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
vue实现菜单切换功能
May 08 Javascript
vue-router结合vuex实现用户权限控制功能
Nov 14 Javascript
Node.js中文件系统fs模块的使用及常用接口
Mar 06 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 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多文件上传下载示例分享
2014/02/20 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
python共享引用(多个变量引用)示例代码
2013/12/04 Python
Python代码的打包与发布详解
2014/07/30 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
医生自荐信
2013/10/11 职场文书
教师找工作推荐信
2013/11/23 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
汽车车尾标语大全
2015/08/11 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
PyTorch device与cuda.device用法
2022/04/03 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android