vue切换菜单取消未完成接口请求的案例


Posted in Javascript onNovember 13, 2020

在做别的功能时 console里面总会报别的菜单接口里的错 看的很心烦 于是想优化一下 就有了这篇文章 在切换菜单的时候取消所有未完成接口的请求

1.找到自己的请求拦截器 重点是 config.cancelToken = global.store.source.token;

http.interceptors.request.use(config => {
 config.cancelToken = global.store.source.token;
 return config
}, err => {
 return Promise.reject(err)
})

2.找到自己全局文件夹我的是global.js

global.store = {
 source: {
  token: null,
  cancel: null
 }
}

3.路由

router.beforeEach((to, from, next) => {
 // ...此处其他代码省略
 // 切换路由时清空上个路由未完成的所有请求
 const CancelToken = axios.CancelToken
 global.store.source.cancel && global.store.source.cancel()
 global.store.source = CancelToken.source()
 next()
})

补充知识:父组件如何获取子组件数据,子组件如何获取父组件数据,父子组件如何传值

1、父组件如何主动获取子组件的数据

方案1:$children

$children用来访问子组件实例,要知道一个组件的子组件可能是不唯一的,所以它的返回值是个数组

定义Header、HelloWorld两个组件

<template>
 <div class="index">
 <Header></Header>
 <HelloWorld :message="message"></HelloWorld>
 <button @click="goPro">跳转</button>
 </div>
</template>
mounted(){
 console.log(this.$children)
}

打印的是个数组,可以用foreach分别得到所需要的数据

缺点:

无法确定子组件的顺序,也不是响应式的

方案2: $refs

<HelloWorld ref="hello" :message="message"></HelloWorld>

调用hellworld子组件的时候直接定义一个ref,这样就可以通过this.$refs获取所需要的数据。

this.$refs.hello.属性

this.$refs.hello.方法

2.子组件如何主动获取父组件中的数据

通过$parent

parent用来访问父组件实例,通常父组件都是唯一确定的,跟children类似

this.$parent.属性

this.$parent.方法

父子组件通信除了以上三种,还有props和emit。此外还有inheritAttrs和attrs

3.inheritAttrs

这是2。4新增的属性和接口。inheritAttrs属性控制子组件html属性上是否显示父组件提供的属性。

如果我们将父组件Index中的属性desc、ketsword、message三个数据传递到子组件HelloWorld中的话,如下

父组件Index部分

<HelloWorld ref="hello" :desc="desc" :keysword="keysword" :message="message"></HelloWorld>

子组件:HelloWorld,props中只接受了message

props:{
 message: String 
}

实际情况,我们只需要message,那其他两个属性则会被当作普通的html元素插在子组件的根元素上

vue切换菜单取消未完成接口请求的案例

这样做会使组件预期功能变得模糊不清,这个时候,在子组件中写入,inheritAttrs:false,这些没用到的属性便会被去掉,true的话,就会显示。

props:{
 message: String 
},
inheritAttrs:false

如果父组件没被需要的属性,跟子组件本来的属性冲突的时候

<HelloWorld ref="hello" type="text" :message="message"></HelloWorld>

子组件:helloworld

<template>
 <input type="number">
</template>

这个时候父组件中type="text",而子组件中type="number",而实际中最后显示的是type="text",这并不是我们想要的,所以只要设置inheritAttrs:false,type便会成为number。

那么上述这些没被用到的属性,如何被获取。这就用到了$attrs

3.$attrs

作用:可以获取到没有使用的注册属性,如果需要,我们在这也可以往下继续传递。

就上述没有用到的desc和keysword就能通过$attrs获取到

通过$attr的这个特性可以父组件传递到子组件,免除父组件传递到子组件,再从子组件传递到孙组建的麻烦

父组件Index部分

<div class="index">
 <HelloWorld ref="hello" :desc="desc" :keysword="keysword" :message="message"></HelloWorld>
</div>

子组件helloworld部分

<div class="hello">
 <sunzi v-bind="$attrs"></sunzi>
 <button @click="aa">获取父组件的数据</button>
</div>

孙组建

<template>
 <div class="header">
 {{$attrs}}
 <br>
 </div>
</template>

可以看出通过v-bind="$attrs"将数组传到孙组建中

除了以上,provide/inject也适用于隔代组件通信,尤其是获取祖先组建的数据,非常方便

provide 选项应该是一个对象或返回一个对象的函数

provide:{
 for:'demo' 
}
inject:['for']

以上这篇vue切换菜单取消未完成接口请求的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
Aug 01 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
浅述Javascript的外部对象
Dec 07 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
基于zTree树形菜单的使用实例
Dec 25 Javascript
详解node.js中的npm和webpack配置方法
Jan 21 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
JavaScript this在函数中的指向及实例详解
Oct 14 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
在vue中嵌入外部网站的实现
Nov 13 #Javascript
如何基于viewport vm适配移动端页面
Nov 13 #Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 #Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 #Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 #Javascript
详解Java中String JSONObject JSONArray List转换
Nov 13 #Javascript
vue print.js打印支持Echarts图表操作
Nov 13 #Javascript
You might like
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
flexigrid 参数说明
2010/11/23 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
Python下singleton模式的实现方法
2014/07/16 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
统计员岗位职责
2013/11/14 职场文书
会务接待方案
2014/02/27 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
加油口号大全
2014/06/13 职场文书
社会实践活动总结范文
2014/07/03 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
ant design vue的form表单取值方法
2022/06/01 Vue.js