vue-router的beforeRouteUpdate不触发

题目描述

根组件tab切换,watch监听路由会触发,但是beforeRouteUpdate不触发

图片描述

相关代码

 <footer class="tabBar">
    <router-link to='/home'>
        <span>首页</span>
    </router-link>
    <router-link to='/noticeCenter'>
        <span>通知中心</span>
    </router-link>
    <router-link to='/myCenter'>
        <span>我</span>
    </router-link>
</footer>
<router-view></router-view>
    
    
 export default {
  data() {
    return {};
  },
  methods: {}
  },
  watch: {
    $route(to, from) {
        console.log(to);
        console.log(from);
    }
  }
  beforeRouteUpdate(to, from, next) {
    console.log(to);
    console.log(from);
    next();
  }
};


routes: [
    { path: '/', redirect: '/home' },
    { path: '/home', component: home }, //首页
    { path: '/noticeCenter', component: noticeCenter },  //通知中心
    { path: '/myCenter',name: 'myCenter',component: myCenter }   //我
]

阅读 24.4k
1 个回答

官方对于beforeRouteUpdate的解释如下:

beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },

不能触发的原因可以看注释的第二、三行,只有动态参数的路径(/foo/1 和 /foo/2这样),才会调用。

我尝试对router动态处理

vue.$router.push({ path: path , query: { t: (new Date()) }});

这个场景下,beforeRouteUpdate成功触发。

你可以考虑修改你的router-link写法,加个参数,代码示例如下:

<router-link :to="{path:'/home',query: {t: new Date()}}">首页</router-link>

当然,最主要的是,这个方法是组件内的导航守卫,切换路由组件,按你目前的代码功能来看,如果想触发,
除了router-link要带参数,还需要修改router-view

<keep-alive>
  <router-view></router-view>
</keep-alive>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏