我正在将 Angular 2.1 用于一个大型应用程序,该应用程序具有多个子模块,每个子模块定义按功能组织的子应用程序。顶层模块通过导入每个子应用程序的路由等,为 RouterModule 配置整个应用程序的所有子路由。因此,从子应用程序的角度来看,它的路由相对于顶层应用程序设置的路由,但是子应用程序并不直接明确地知道其顶级路由实际上是什么。
其中一些子应用程序具有在另一个子应用程序中更完整地定义/控制的实体的摘要面板。从概念上讲,模块的设置如下:
Module 1:
Imports Module 2
Routes for Module 1
Component1A
App1View (contains Component1A, M2SummaryComponent)
Module 2:
Routes for Module 2 (one exported as APP2_VIEW_ROUTE, type Route)
Component2A
Component2B
M2SummaryComponent
App2View (contains Component2A, Component2B)
...etc.
我正在寻找一种设计模式,可以将 M2SummaryComponent 编写为链接到其自己模块内的路由,同时在模块 1 的 App1View 中实例化它,而无需以某种方式手动硬编码或重新组装路由。
我曾希望这是一个很常见的问题,Angular 团队可能使用类似的方法使之成为可能router.navigate([APP2_VIEW_ROUTE, ...other params])
,您可以简单地传递用于配置与所需路径相关的 RouterModule 的路由对象。然而,查看源代码这似乎不是一个选择。相反,我们有 ActivatedRoute 的示例。
ActivatedRoute 面临的问题(this.route
下面)是它将相对于 App1View。所以尝试使用router.navigate(['m2SpecialId'],{relativeTo: this.route})
是不可能的,因为它将与我们到达 App1View 的路径相关,而不是返回到模块 2 到 App2View 的首选路线。
据我所知,围绕这些问题的唯一另一种稍微优雅的路线(双关语)是使每个子应用程序的模块都可以作为 ModuleWithProviders 导入,这样就可以选择将顶级路线告知模块应用于其状态。然后编写辅助函数,使用其定义的路由来组装特定于该子应用程序的 URI。
这感觉非常样板......就像框架中已经存在解决方案或设计模式一样,因此出现了这个问题。
问题:
是否有一种使用 Angular2 Router 的设计模式,允许导入其他模块的组件干净地引用自己模块的预配置路由,同时保持灵活的顶级路由定义?