Vue 路由器视图事件传播



我不知道为什么路由器视图不发出"login"事件。
这是我正在玩的小提琴:https://jsfiddle.net/cvtwxf6h/22/

我想要 2 种不同的布局,一种用于登录用户,另一种用于未登录用户。要显示的布局由索引组件的 logged 属性确定。
当我在登录页面中单击"登录"时,"登录"事件应传播到 Index 组件以更新logged属性并更改布局。由于某种原因,路由器视图没有发出事件,我做错了什么?

(我只是想了解问题所在,我对实现这一目标的其他方法不感兴趣(

问题似乎是router-link在发出login事件之前导航到不同的路线(通过 to="{name: 'index'}"(,这会导致事件以某种方式丢失。如果目标路由与当前路由相同(无导航(,则事件到达父组件时没有问题。

解决方法是在发出事件强制使用 $router.push() 进行导航:

const LoginPage = {
  template: `<router-link to="" @click.native="switchToLoggedPage({ name: 'index' })">Login</router-link>`,
  methods: {
    switchToLoggedPage(route) {
      this.$emit('login');
      this.$router.push(route);
    },
  },
};

演示

最新更新