vue中监听路由的变化

3,138 阅读1分钟

在vue中监听路由的变化,我们经常用到在watch增加$route的方法;

方法一:

$route(val) {
    console.log(val)
}

方法二:

$route: {
    handler: 'init', // init为自定义方法
    deep: true
}

或者

$route: {
    handler: (val) {
        this.init(val)
    },
    deep: true
}

路由变化时,需要注意2点:

当路由或者路由参数发生变化,都能发watch中的$route,但是当前后路由一样,仅仅使用setParam等方法直接更改query时,是监听不到$route的变化的,而是需要使用this.$router.push的方法,传入当前路由路径和新的query,才能触发对$route的watch;

其次,当路由改变,但是前后两个路由的使用同一组件,默认情况下当这两个页面切换时并不会触发vue的created或者mounted钩子,这里虽然可以通过watch $route的变化来做处理,但其实说真的还是蛮麻烦的。简单的做法的在 router-view上加上一个唯一的key,来保证路由切换时都会重新渲染触发钩子了

<router-view :key="key"></router-view> computed: {  key() {    return this.$route.name !== undefined ? this.$route.name +new Date(): this.$route +new Date()  }}

使用computed属性和Date()可以保证每一次的key都是不同的。