路由器视图事件传播视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了路由器视图事件传播视图相关的知识,希望对你有一定的参考价值。

我无法弄清楚为什么路由器视图不会发出“登录”事件。 这是我正在玩的小提琴:https://jsfiddle.net/cvtwxf6h/22/

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

(我只是想了解这个问题,我对替代方法不感兴趣)

答案

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

一个解决方法是在发布事件后强制导航$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);
    },
  },
};

demo

以上是关于路由器视图事件传播视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用点击事件使其不会传播到视图

在重叠视图的情况下控制触摸事件传播

如何让自定义视图观察包含片段的生命周期事件而不是活动?

如何在滚动视图中设置谷歌地图片段

将触摸传递给下的视图

试图从视图中删除片段在 mNextAnim 上给了我 NullPointerException