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 相关文章推荐
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
js实现在字符串中提取数字
Nov 05 Javascript
jquery获取元素索引值index()示例
Feb 13 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
jQuery使用经验小技巧(推荐)
May 31 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
Vue前端项目部署IIS的实现
Jan 06 Javascript
vue滑动吸顶及锚点定位的示例代码
May 10 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JS三级联动代码格式实例详解
2019/12/30 Javascript
Python下线程之间的共享和释放示例
2015/05/04 Python
Python如何为图片添加水印
2016/11/25 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
Python实现翻转数组功能示例
2018/01/12 Python
解决python "No module named pip" 的问题
2018/10/13 Python
python将list转为matrix的方法
2018/12/12 Python
Pytorch之finetune使用详解
2020/01/18 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
巴西网上药房:onofre
2016/11/21 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
产品销售员岗位职责
2013/12/18 职场文书
政府个人对照检查材料
2014/08/28 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
留学推荐信中文范文
2015/03/26 职场文书
初中同学会致辞
2015/08/01 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python