通常情况下我们喜欢设置keepAlive 包裹 router-view
?
1 2 3 4 5 | < div id = "app" > < keep-alive > < router-view ></ router-view > </ keep-alive > </ div > |
同时在created 中触发请求,在路由参数不同的情况下并不会执行对应的操作。
解决方法:
1、给 router-view 设置 key 属性为路由的完整路径
?
1 2 3 | <keep-alive> <router-view :key= "$route.fullPath" ></router-view> </keep-alive> |
这种方法我觉得应该是一劳永逸的方法,可能对性能造成一定损耗。不适用于一个tab切换路由并加载列表的组件,会造成页面白屏,dev模式不会自动刷新,是个坑
2、官方给出的方法是通过 watch 监听路由变化,做判断路由路径然后调用响应的方法
?
1 2 3 4 5 6 7 | watch: { '$route' () { if ( this .$route.path === 'test' ) { this .test(); } } } |
?
1 2 3 4 5 6 7 8 | watch: { 'id' : { handler: 'test' , //调用方法 immediate: true , //进入立即执行一次 } }, |
这两种方法推荐第一种,第二种需要先对参数id进行赋值
3、通过组件导航守卫来设置对应的meta 属性
?
1 2 3 4 5 6 7 8 | beforeRouteEnter: (to, from, next) = > { // 写在当前组件 to.meta.keepAlive = false next() }, beforeRouteLeave: (to, from, next) = > { //写在前一个组件 to.meta.keepAlive = false next() }, |