vue-router不同的路由共用一个组件component的问题
在使用Vue-router做项目时,会遇到如/serviceId/:id这样只改变id号的场景。由于router-view是复用的,单纯的改变id号并不会刷新router-viewwatch 除了可以监听数据的变化,路由的变化也能被其监听到:key vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可针对以上,经过本人项目实践以及网
在使用Vue-router做项目时,会遇到如/serviceId/:id这样只改变id号的场景。由于router-view是复用的,单纯的改变id号并不会刷新router-view
watch 除了可以监听数据的变化,路由的变化也能被其监听到
:key vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可
针对以上,经过本人项目实践以及网友贡献,有三种方法可解决:
方法一:通过 watch 监听路由(亲测可行)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
方法二:用 :key 来阻止“复用”
具体使用方法:
1、tips:使用computed属性和Date()可以保证每一次的key都是不同的,这样就可以如愿刷新数据了
1 2 3 4 5 6 7 |
|
2、
设置key为$route.fullPath之后,由于两个路由的fullPath不同,组件会被强制不复用,所以将会回到正常流程,切换路由时mounted会被触发
<router-view :key="$route.fullPath"/>
方法三:通过 vue-router 的钩子函数 beforeRouteEnter beforeRouteUpdate beforeRouteLeave
由于 Vue 会复用相同组件, 即 /page/1 => /page/2 或者 /page?id=1 => /page?id=2 这类链接跳转时, 将不在执行created, mounted之类的钩子, 这时候你需要在路由组件中, 添加beforeRouteUpdate钩子来执行相关方法拉去数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
更多推荐
所有评论(0)