详解解决Vue相同路由参数不同不会刷新的问题
程序员文章站
2022-05-25 22:23:16
通常情况下我们喜欢设置keepalive 包裹 router-view
...
通常情况下我们喜欢设置keepalive 包裹 router-view
<div id="app"> <keep-alive> <router-view></router-view> </keep-alive> </div>
同时在created 中触发请求,在路由参数不同的情况下并不会执行对应的操作。
解决方法:
1、给 router-view 设置 key 属性为路由的完整路径
<keep-alive> <router-view :key="$route.fullpath"></router-view> </keep-alive>
这种方法我觉得应该是一劳永逸的方法,可能对性能造成一定损耗。不适用于一个tab切换路由并加载列表的组件,会造成页面白屏,dev模式不会自动刷新,是个坑
2、官方给出的方法是通过 watch 监听路由变化,做判断路由路径然后调用响应的方法
watch: { '$route' () { if (this.$route.path === 'test') { this.test(); } } }
watch: { 'id': { handler: 'test', //调用方法 immediate: true, //进入立即执行一次 } },
这两种方法推荐第一种,第二种需要先对参数id进行赋值
3、通过组件导航守卫来设置对应的meta 属性
beforerouteenter: (to, from, next) = > { // 写在当前组件 to.meta.keepalive = false next() }, beforerouteleave: (to, from, next) = > { //写在前一个组件 to.meta.keepalive = false next() },
个人比较喜欢第一种方法
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。