我正在用 Angular 做一些关于如何定义“完全包含”的模块的实验(这意味着每个模块不仅应该有自己的组件定义,还应该有它们的路由,并且,如果有必要,保护它的每个路由) ,但我在嵌套路由和各自的router-outlets
.
这个实验的主要目的是无论用户是否通过身份验证,都有不同的布局:
- 如果未通过身份验证,将显示一个带有登录表单的简单页面(还有一个更改为“忘记密码?”类型的表单,在另一条路线上)
- 如果已通过身份验证,则布局(我称为
private-layout
)应该始终有一个导航栏和一个router-outlet
那里,其中应显示经过身份验证时可访问的页面。
问题是,由于某种原因,private-layout
没有被注入,它的嵌套路由直接注入到 main 上router-outlet
。
我有一个 Stackblitz 可以更好地说明这个场景:https ://stackblitz.com/edit/angular-bsqgfl
如您所见,当应用程序启动时,它直接进入 AuthModule(因为它与空路由匹配),在那里您可以看到注入 Auth 的 'login' 组件router-outlet
。您甚至可以尝试从“登录”切换到“忘记密码”,“忘记密码”嵌套内容将按预期注入。但是,如果您尝试将 URL 更改为“测试”,而不是看到导航栏和注入的测试组件,导航栏根本不会显示,因为测试组件是直接在 main 上注入的router-outlet
。
我很确定这与我定义路线的方式有关,但我希望它们尽可能靠近它的模块,但我不知道如何处理这个问题。我在这里遇到了一些答案,但他们都在一个地方定义了所有可能的应用程序路由,但我希望我的分布在每个相应的模块中。