带有“嵌套”路由器的手风琴中装入了不正确的组件

时间:2019-07-02 15:21:21

标签: angular angular-material angular-router

我正在将mat-accordionrouter-outlet一起使用,并观察到一种奇怪的行为。以下是我的用例的示例实现。
https://stackblitz.com/edit/angular-material-accordion-with-router

在此示例中,面板3组件和面板4组件具有router-outlet。 现在,在第一次导航中,它可以按预期工作。但是,如果我折叠这些面板,然后再次尝试打开它们,我会发现面板4的内容会反映在面板3中。

我不确定这是angular-router中的错误还是在这里做错了。

1 个答案:

答案 0 :(得分:1)

您已经将路线和出口与非路线和组件混淆了。路线用于显示插座中的指定组件,而模板使用这些组件。您应该只做一件事-要么将组件直接放在模板中,要么使用一条路线将其显示在插座中。

您的模板将所有四个“面板”组件放置在页面上,其中两个(3和4)定义了插座。因此,页面上有两个出口。由于未命名,因此它们都试图成为路由器的默认或“主要”出口,因此,任何未定向到命名出口(这是您的所有路由)的路由都将转到其中一个(或者也许是两者-我不知道Angular如何处理)。

您还将路线用于非路线的组件(面板1和2)。例如,如果打开面板1,然后打开DOM检查器,则将在面板3或4的插座中看到另一个面板1组件。

解决方法是从路由中删除不是实际路由的组件-“ panel1”和“ panel2”,并命名两个插座,并使用路由器和链接配置来定位这些插座。

Stackblitz