class 实现 RouterLayout 也可以定义为 @Route

Can a class implementing RouterLayout could also be defined as @Route

我正在学习 Vaadin Flow (Vaadin v10),但对 Route(@Route 作为注解)和 RouterLayout 的概念有困难。

来自我已经阅读过的文档 Vaadin's website!我无法找到特定问题的答案。

可以将实现 RouterLayout 的 class 也定义为 @Route 吗?

@Route("")
public class MainLayout extends Div implements RouterLayout {
}

请(如果可能)提供对某些文档的引用。据我了解, RouterLayout 旨在呈现其中的视图。因此,如有必要,可以覆盖 public void showRouterLayoutContent(HasElement content) 方法以创建所需的布局。因此,将本质上定义视图的 @Route 注释与 RouterLayout 混合使用没有意义?

或者是吗?如果RouterLayout可以和@Route注解一起使用,说明layout也是view;有人能给我提供一个简单的场景吗?

正如您所说 - 在概念层面上,将 @RouteRouterLayout 放在同一个 class 上似乎很奇怪。 @Route 注释放在叶节点上。您可以有一个独立的 @Route,它将放置在 <body> 元素中,或者您可以有一个嵌套布局,其中路由显示在一个或多个父布局内。可以使用注释的第二个参数指定父布局,如

@Route(value = "users", layout = Dashboard.class)
public class Users extends Div {
//...

,其中 Dashboard 需要实现 RouterLayout。因此,您将使用 http://server-address-here/users 访问此路由,它会在 Dashboard 中显示 Users

如果你想要一个更具描述性的 URL,你可以使用 Dashboard 上的 @RoutePrefix 注释来实现它:

@RoutePrefix("dashboard")
public class Dashboard extends VerticalLayout implements RouterLayout { 
// ...

现在您将从 http://server-address-here/dashboard/users 到达 Users 视图,而其他方面将与以前相同。