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语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
JavaScript 空位补零实现代码
Feb 26 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
瀑布流布局并自动加载实现代码
Mar 12 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
SVG描边动画
Feb 23 Javascript
jquery获取元素到屏幕四周可视距离的方法
Sep 05 jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
Openlayers学习之加载鹰眼控件
Sep 28 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
人族 Terran 基本策略
2020/03/14 星际争霸
php Smarty模板生成html文档的方法
2010/04/12 PHP
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
python列表操作使用示例分享
2014/02/21 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
水务局局长岗位职责
2013/11/28 职场文书
社区活动总结报告
2014/05/05 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
解除施工合同协议书
2014/10/17 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
三国演义读书笔记
2015/06/25 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
Python+Tkinter打造签名设计工具
2022/04/01 Python
python内置模块之上下文管理contextlib
2022/06/14 Python