【发布时间】:2016-10-26 17:03:40
【问题描述】:
我将 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 路由器的设计模式,允许导入其他模块的组件干净地引用自己模块的预配置路由,同时保持灵活的顶级路由定义?
【问题讨论】: