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 相关文章推荐
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
javascript高级学习笔记整理
Aug 14 Javascript
在浏览器窗口上添加遮罩层的方法
Nov 12 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
jQuery弹出(alert)select选择的值
Apr 21 Javascript
js实现文章文字大小字号功能完整实例
Nov 01 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
原生js实现无缝轮播图效果
Jan 11 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
js验证账户名是否重复
May 26 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
Django框架模板介绍
2019/01/15 Python
详解python的四种内置数据结构
2019/03/19 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
党员创先争优公开承诺书
2014/03/28 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript