我目前正在将我的角度知识从1.x版本升级到2+,并且在理解RouterModule的某些部分时遇到了一些麻烦。
我定义了一个根路由模块,并将其导入到我的根模块中。然后,我有两个子模块,每个子模块都有自己的路由模块,这些模块是使用forChild而不是forRoot添加的。这些子路由模块被添加到它们各自的模块中,这些模块又被添加到根模块中。据我了解,这仍然是正确的(并且可行)。
让我感到困惑的是,似乎对根路由模块和子模块的导入顺序有一些要求。
请参阅下面的根模块中的导入片段。
imports: [
BrowserModule,
SharedMaterialModule,
BrowserAnimationsModule,
Child1Module
Child2Module,
AppRoutingModule
],
那行得通。但是,如果我切换到此:
imports: [
BrowserModule,
SharedMaterialModule,
BrowserAnimationsModule,
Child2Module,
AppRoutingModule
Child1Module
],
我不能再使用从Child2Module到Child1Module的routerLink。它总是重定向到根路由模块中定义的默认路径。
我进行了一些搜索,但无法真正找到导致此问题的原因的明确答案(尽管我怀疑这可能与延迟加载的模块有关!!)。
非常感谢您的帮助。
答案 0 :(得分:1)
在尝试根据路径选择正确的路线时,Angular使用称为“首次比赛获胜”的策略。在您的应用程序根路由中,定义通配符路由。如果将AppRoutingModule放在Child1Module之前,并尝试从Child2Module重定向到Child1Module,则第一个匹配的路由将是AppRoutingModule的通配符。在这里,您有更多详细信息: https://angular.io/guide/router#define-a-wildcard-route