当使用路由参数时,例如从 /user/aside
导航到 /user/foo
,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。
注意:
(1)从同一个组件跳转到同一个组件。
(2)生命周期钩子created和mounted都不会调用。
可以使用router的组件内钩子函数
beforeRouteUpdate(to,from,next){
//在这个钩子函数中:to表示将要跳转的路由对象,from表示从哪个路由跳转过来,next多数就是需要调用
//created和mounted不调用,无法拿到需要的动态值,就通过to.path,to.params等
//可以在这个函数中打印to,具体看to对象有什么可以使用的属性
}
添加watch监听
watch: {// 方法1 //监听路由是否变化'$route' (to, from) {if(to.query.id !== from.query.id){this.id = to.query.id;this.init();//重新加载数据}}}//方法 2 设置路径变化时的处理函数watch: {'$route': {handler: 'init',immediate: true}}
为了实现这样的效果可以给router-view
添加一个不同的key
,这样即使是公用组件,只要url变化了,就一定会重新创建这个组件。
<router-view :key="$route.fullpath"></router-view>