为单个路线渲染多个组件?

时间:2016-05-16 18:15:12

标签: angular angular2-routing

我有一个使用三列布局的应用程序,基本上有导航列,工具箱和主要内容区域。并非所有这些组件都不一定总是存在。我现在想在每个列中呈现不同的组件。

目前,我这样做是通过从左到右对组件进行硬编码:导航栏始终存在,旁边是router-outlet。在该路由器内部加载编辑器并且提供的侧边栏是硬编码的。这很丑陋有两个原因:

  • 我想允许用户重新排序这些列。但由于"不正确"亲子关系。如果所有列都是兄弟姐妹,那就容易多了。
  • 除此之外,导航栏是一个完整的混乱,由大量的switch-case语句组成,以根据当前路径显示正确的导航类型。

我正在寻找的是这样的:

<router-outlet name="navigation"></router-outlet>
<router-outlet></router-outlet>
<router-outlet name="sidebar"></router-outlet>

起初我认为辅助路线是我想要的东西。但在做了一些阅读后,这些路线似乎在导航网址中引入了一个完全独立的子树?我想基于完全相同的URL渲染这些组件。

我当然可以做自己的&#34;有点&#34;通过引入一个充满switch语句的元边栏来进行路由,就像我已经有效地完成了导航一样。但是这样做a)打破延迟加载并且b)使用起来不太愉快。

如果到目前为止我已经进行了抽象,这是一个非常精确的用例:主要内容区域是SQL,CSS或HTML的某种编辑器。根据编辑的确切内容,导航栏会将数据显示到特定级别。另一列或多或少是一个上下文相关工具箱,它根据编辑内容的类型显示不同的项目。所有这三个组件都需要来自URL的完全相同的信息:当前编辑的内容是什么?

Three column layout with nav column, editor and sidebar

1 个答案:

答案 0 :(得分:0)

您可能有多个路由器插座,但是无法使用一个URL激活它们,因为配置路由配置时,必须唯一标识路径。

您可能必须编写自定义逻辑来读取URL params并基于此调用一些嵌入式子路由,这将为您的不同区域提取不同的组件。

希望这会有所帮助!!