vue监听路由变化时watch方法会执行多次的原因及解
本人前端菜鸟一名,一直致力于不间断的生产管理后台的bug,并以此自勉自励。近几天接到一个需求,网上也搜了很多例子,没有从根本上解决。在这里记录一下我自己的解决的过程,这也是第一次在掘金发言,求轻虐。
需求描述
有A、B两个页面,需要将A页面的orderId用路由传参的方式传入到B页面执行数据关联查询,然后显示在B页面
需求解析
如果是你,你拿到这个需求,应该很容易想到在B页面对路由变化做watch,然后获取参数执行查询数据的方法完事。
解决需求
A页面中
const route = { name: 'BpageName', params: { orderId: this.tableData[index].id }, meta: { title: 'B页面' } } this.$router.push(route)
push一个路由重新打开B页面
然后B页面中接受路由传参
@Watch('$route.params.packageId') routeParamsChanged(newParams: any, oldParams: any) :void { // 通过监听传参的变化来重新复制参数 if (newParams) { this.getList(newParams) } }
看起来是不是很简单?
问题来了,因为B页面做了keep-alive页面缓存,第一次路由切换的时候routeParamsChanged方法只执行一次,达到了预期效果。,如果关闭B页面或者不关闭B页面的情况下再从A页面跳转到B页面的情况下就会触发两次或多次routeParamsChanged方法。
查了很多资料, 这里有解释造成这种情况的原因。
解决方法1 判断fullPath是不是A页面
if (this.$route.fullPath === 'A页面路由路径') { // do something }
怀着激动的心情去试了试
@Watch('$route') routeParamsChanged(newParams: any, oldParams: any) :void { // 通过监听传参的变化来重新复制参数 if (newParams === '/Apage') { this.getList(newParams) } }
结果还是不行,routeParamsChanged方法还是会执行两次或多次。 解决方法2 添加一个flag参数来判断页面是否是active状态,使用keep-alive缓存的组件只会触发activated和deactivated事件,所以就在这两个事件触发时把flag置为true和false,只有在flag为true的时候才执行getList()。
private activatedFlag: boolean = false activated () { this.activatedFlag = true; } deactivated () { this.activatedFlag = false; } @Watch('$route') routeParamsChanged(newParams: any, oldParams: any) :void { // 通过监听传参的变化来重新复制参数 if (newParams && this.activatedFlag) { this.getList(newParams) } }
这回改解决了吧?结果还是不行,routeParamsChanged方法还是会执行两次或多次。 崩溃ing.........
问题解决
借鉴了上面的解决方法2,最终在activated ()生命周期钩子函数中取实现获取参数且调用获取数据的方法即可,都不用去监听路由的变化,只要获取了this.$route.params.orderId就去获取数据。
private activatedFlag: boolean = false activated () { this.activatedFlag = true if (this.$route.params.orderId && this.activatedFlag) { this.getList(this.$route.params.orderId) } } deactivated () { this.activatedFlag = false; }
大功告成,终于解决了。大佬们求轻吐槽代码,有更好的意见或建议,欢迎评论留言指导。
以上就是vue监听路由变化时watch方法会执行多次的原因及解决的详细内容,更多关于vue watch方法会执行多次的原因及解决的资料请关注狼蚁SEO其它相关文章!
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南