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 相关文章推荐
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
Mar 25 Javascript
DWZ刷新dialog解决方法
Mar 03 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
jquery图片倾斜层叠切换特效代码分享
Aug 27 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
jquery对所有input type=text的控件赋值实现方法
Dec 02 Javascript
JavaScript布尔运算符原理使用解析
May 06 Javascript
原生js实现购物车
Sep 23 Javascript
Echarts如何重新渲染实例详解
May 30 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 mssql 时间格式问题
2009/01/13 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
js日期联动示例
2014/05/02 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
python基础教程之Hello World!
2014/08/29 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
django基于restframework的CBV封装详解
2019/08/08 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
导游实习生自荐书
2014/01/28 职场文书
机修工工作职责
2014/02/21 职场文书
战友聚会主持词
2014/04/02 职场文书
怎样写观后感
2015/06/19 职场文书
Python如何配置环境变量详解
2021/05/18 Python
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python