Vue-router:beforeEnter guard对于子路径不能正常工作

时间:2017-10-19 19:49:49

标签: vue.js vuejs2 vue-component vue-router

我试图为我的孩子路线定义一个beforeEnter后卫,但我没有成功。这是我的路线配置:

  ...
  {
    path: '/',
    component: App
    beforeEnter: (to, from, next) ->
       # This block is only reached when I refresh the page

    children: [
      {
        name: 'component1',
        path: '/component1',
        components: component1
      },
      {
        name: 'path2',
        path: '/path2',
        components: component2
      },
     ...
    ]
  }
  ...

当我刷新页面或直接在浏览器上插入URL时,一切正常(例如:base_path / path2)。但是当我点击重定向到path1或path2的路由器链接时,beforeEnter后卫不会执行。

我明白了什么不对吗?我是否需要为每个孩子设置一个beforeEnter后卫?

3 个答案:

答案 0 :(得分:4)

我找到的最佳解决方案是使用beforeEach guard而不是beforeEnter。

beforeEnter是一个每个路由保护,然后它只应用于父路由,但不适用于子路由。

答案 1 :(得分:0)

尝试添加beforeRouteUpdate钩子,即

...
{
path: '/',
component: App
beforeEnter: (to, from, next) ->
   # This block is only reached when I refresh the page
beforeRouteUpdate: (to, from, next) ->
   # This will called when you use router-links
children: [
  {
    name: 'component1',
    path: '/component1',
    components: component1
  },
  {
    name: 'path2',
    path: '/path2',
    components: component2
  },
 ...
]
}
...

答案 2 :(得分:0)

@ strelok2010,beforeRouteUpdate是组件的挂钩。