1. axios拦截器进行配置,除了白名单中的接口,统统保存到全局变量canCancelAxios中

window.canCancelAxios = [];

// http request 拦截器
axios.interceptors.request.use(
config => {
let whiteList = ['/test1', '/test2']; // 白名单接口
if (config.url && whiteList.every(item => !config.url.includes(item))) {
config.cancelToken = new axios.CancelToken(function (c) { window.canCancelAxios.push({ key: config.key || "", cancel: c }) });
}
return config;
},
err => {
return Promise.reject(err);
}
)

2. 定义一个取消取消axios的方法

/**
* 取消axios请求
* @param cellArr 要取消的接口;如果不传参,则取消canCancelAxios保存的所有接口
*/
export function cancelAxios(cellArr = []) {
if (cellArr.length > 0) {
cellArr.forEach(val => {
for (let i = 0; i < window.canCancelAxios.length; i++) {
if (window.canCancelAxios[i].key === val) {
window.canCancelAxios[i].cancel();
window.canCancelAxios.splice(i, 1);
i--;
}
}
})
} else {
for (let i = 0; i < window.canCancelAxios.length; i++) {
window.canCancelAxios[i].cancel();
window.canCancelAxios.splice(i, 1);
i--;
}
}
}

3. 路由配置中,路由切换时,取消axios请求

import cancelAxios from "***";
router.beforeEach((to, from, next) => {
cancelAxios();
// 进行其他业务操作
})

4. 特殊情况下(比如切换tab页时),可能需要取消特定某些axios

import cancelAxios from "***";
cancelAxios(["axios1", "axios2"]);

注意

// 这里取消特定的axios是根据axios拦截器中config.key来识别接口的,所以接口请求时要配置key参数,不然不能正确取消;
// 比如上面要取消的["axios1", "axios2"]
test1: () => Axios.get(`/path1`, { key: "axios1" }),
test2: () => Axios.get(`/path2`, { key: "axios2" })

切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单的更多相关文章

  1. axios 封装 跨域 实现 (后端跨域配置白名单)

    1. 始vue化项目 vue init webpack deaxios # 使用脚手架创建项目 deaxios(项目名,随便取得) cd deaxios # 进入项目cnpm install npm ...

  2. vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置

    官方用例:https://router.vuejs.org/zh-cn/advanced/scroll-behavior.html import Vue from 'vue' import Route ...

  3. vue切换路由时动画

    安装个包 npm i nprogress 直接导入使用 最终的效果就是

  4. Vue切换页面时中断axios请求

    一.概述 在Vue单页面开发过程中,遇到这样的情况,当我切换页面时,由于上一页面请求执行时间长,切换到该页面时,还未执行完,这时那个请求仍会继续执行直到请求结束,此时将会影响页面性能,并且可能对现在页 ...

  5. Vue中断axios请求-切换页面+重复请求

    切换页面时中断 一.概述 在Vue单页面开发过程中,遇到这样的情况,当我切换页面时,由于上一页面请求执行时间长,切换到该页面时,还未执行完,这时那个请求仍会继续执行直到请求结束,此时将会影响页面性能, ...

  6. VUE如何实现切换页面时的过渡动画?

    最近再写页面的时候,感觉页面之间的切换有点生硬,所以查了一下文档看见了transition这个组建,很实用,故此在这里跟大家分享一下 --------------------------------- ...

  7. vue切换路由页面内容没有重载

    项目中遇到这样一个问题: 在一个地方填了一个申请的表单,需要在另一个页面的列表上显示出来这条申请的数据,但是由于vue的缓存,在切换路由时列表上并没有及时更新数据,解决方法如下: vue路由切换时页面 ...

  8. 10. vue axios 请求未完成时路由跳转报错问题

    axios 请求未完成时路由跳转报错问题 前两天项目基本功能算是完成了,在公司测试时遇到了遇到了一个问题,那就是在请求未完成时进行路由跳转时会报错,想了几种办法来解决,例如加loading,请求拦截, ...

  9. Vue之单文件组件的数据传递,axios请求数据及路由router

    1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...

随机推荐

  1. basic play

    [root@wen ~]# w 19:01:27 up 1 day, 7:06, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN ...

  2. Divideing Jewels

    Divideing Jewels 时间限制: 1 Sec  内存限制: 128 MB提交: 63  解决: 17[提交][状态] 题目描述 Mary and Rose own a collection ...

  3. 2018年最新Java面试题及答案整理(持续完善中…)

    2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...

  4. 自动收集有效IP代理

    自动收集有效IP代理 #需要的外部依赖包requests和lxml#自动获取的代理ip数据保存为”IP代理池.txt“#read_ip函数用于提取”IP代理池.txt“的数据返回类型为列表from l ...

  5. Spring Boot学习一之Spring Beans和依赖注入

    你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖.简单起见,我们经常使用 @ComponentScan 注解搜索beans,并结合 @Autowired 构造器注入. 如 ...

  6. VSphere随笔 - vCenter6.5安装配置手册

    一.前期准备: 1.物理机准备 一台已安装了ESXI虚拟化系统的机器: 2.DNS服务器准备 新建一台DNS服务器,添加vcenter的双向解析. (1)安装一台win2008的机器 (2)开启DNS ...

  7. 测开之路三十六:常用的css选择器

    在static下新建一个css,并写入内容 /*标签选择器,label标签的颜色为红色*/label {color: red;} /*.代表类选择器,绿色*/.test {color: green;} ...

  8. websocket简单实现聊天

    1.多人聊天 from geventwebsocket.handler import WebSocketHandler # 请求处理WSGI HTTP from geventwebsocket.ser ...

  9. 字符串格式的Url的截取

    一,我们先在看在页面上获取的URL的处理,如下方法: //获取全部URL string Url = Request.Url.ToString(); Url += "</br>&q ...

  10. HTTP请求方式: GET和POST的比较

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...