【问题标题】:Routing within Child Components子组件内的路由
【发布时间】:2021-11-25 19:43:29
【问题描述】:

在基本应用程序中,您有一个主要的vaadin-app-layout<slot>s,路由器放置子组件。但是如果这样的子组件本身有子组件并且我想使用路由在它们之间进行路由怎么办?我可以有一个带有插槽的嵌套vaadin-app-layout 吗?对于任何给定的 URL 路径,路由器如何知道在哪个插槽中填充组件?

作为一个具体示例,想象一个典型的应用程序布局,其中包含标题、左侧的导航栏和右侧的主视图。 Vaadin 路由器可以将不同的视图加载到主视图窗格。但是现在想象一下,加载到主视图的组件之一本身就是一个带有两个选项卡的 Vaadin 选项卡视图,我希望能够从应用程序中的任何位置路由到这些选项卡中的每一个,为它们添加书签,asf。

【问题讨论】:

    标签: vaadin20 vaadin-fusion hilla


    【解决方案1】:

    Vaadin 路由器通过在父路由对象和子路由对象中指定组件属性来支持这一点。

    请参阅https://vaadin.github.io/router/vaadin-router/#/classes/Router/demos/demo/index.html 上的“嵌套组件”部分

    使用 2 级或更多级别的嵌套布局应该没有问题。例如:

    router.setRoutes([
      {path: '/',
        component: 'x-main-layout',
        children: [
          {path: '/', component: 'x-home-view'},
          {path: '/subsection',
            component: 'x-subsection-layout',
            children: [
              {path: '/', component: 'x-other-view'},
              {path: '/list', component: 'x-list-view'},
            ]
          },
        ]
      }
    ]);
    

    当导航到 /subsection/list 时,您最终会得到:

    <x-main-layout>
      <x-subsection-layout>
        <x-list-view></x-list-view>
      </x-subsection-layout>
    </x-main-layout>
    

    视图组件只是根据您的路由层次结构添加为子组件,因此当您在组件上有一个影子根时,内容将被插入默认槽中。

    【讨论】:

    • 太好了,谢谢!是否必须使用vaadin-app-layout 组件来托管&lt;slot&gt;s,例如在您的示例中,x-main-layoutx-subsection-layout 的 HTML 模板是否包含 vaadin-app-layout 元素?或者任何组件都可以托管路由器使用的 slot 元素?
    • vaadin-app-layout 只是一个简单的布局组件,它提供了一个可选的顶部菜单和可折叠的侧边栏。任何事情都不需要它。您可以使用任何您喜欢的元素/组件。如果你确实想使用vaadin-app-layout,你应该只将它放在最顶层的组件中(在这种情况下在x-main-layout 中),因为它旨在包装整个应用程序。
    • 再次感谢。在子路由中使用 title 属性仍然存在问题,但我已经为此打开了一张票(并且还找到了解决方法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2016-12-19
    • 1970-01-01
    • 2019-06-23
    • 2020-08-09
    • 2017-11-08
    • 2016-07-24
    相关资源
    最近更新 更多