监听在另一个视图中触发的事件

lew*_*shh 2 vaadin vaadin-flow

如何在从另一个视图触发事件的视图中添加侦听器?

看法:

fireEvent(new SelectionEvent(this, false));
Run Code Online (Sandbox Code Playgroud)

应用程序布局:

addListener(AnotherView.SelectionEvent.class, e -> setTabsEnabled(true));
Run Code Online (Sandbox Code Playgroud)

View 将 AppLayout 作为路由目标组件的父组件。

事件已触发,但侦听器未收到事件来执行表达式。当两者在同一视图中执行但不分开时,此模式效果很好。

Haw*_*awk 6

如果我理解正确,您想要捕获父布局(在本例中为 AppLayout)中的事件。

您可以使用UI(对应于标签<body>)作为事件总线。为此,您可以使用以下代码:

// AnotherView
ComponentUtil.fireEvent(ui, new MyAppLayout.SelectionEvent(ui, false));
// AppLayout
ComponentUtil.addListener(ui, SelectionEvent.class, e -> setTabsEnabled(true));
Run Code Online (Sandbox Code Playgroud)

请注意,我已将事件从触发事件的特定视图移至通用应用程序布局类,以便 MyAppLayout 不需要依赖于子视图。另一方面,AnotherView 已经依赖于@Route注释中定义的 MyAppLayout。