角度布线,必须在父级之前导入子级模块吗?

时间:2019-04-21 12:47:53

标签: angular import routing

我目前正在将我的角度知识从1.x版本升级到2+,并且在理解RouterModule的某些部分时遇到了一些麻烦。

我定义了一个根路由模块,并将其导入到我的根模块中。然后,我有两个子模块,每个子模块都有自己的路由模块,这些模块是使用forChild而不是forRoot添加的。这些子路由模块被添加到它们各自的模块中,这些模块又被添加到根模块中。据我了解,这仍然是正确的(并且可行)。

让我感到困惑的是,似乎对根路由模块和子模块的导入顺序有一些要求。

请参阅下面的根模块中的导入片段。

imports: [
    BrowserModule,
    SharedMaterialModule,
    BrowserAnimationsModule,
    Child1Module
    Child2Module,
    AppRoutingModule
  ],

那行得通。但是,如果我切换到此:

imports: [
    BrowserModule,
    SharedMaterialModule,
    BrowserAnimationsModule,
    Child2Module,
    AppRoutingModule
    Child1Module
  ],

我不能再使用从Child2Module到Child1Module的routerLink。它总是重定向到根路由模块中定义的默认路径。

我进行了一些搜索,但无法真正找到导致此问题的原因的明确答案(尽管我怀疑这可能与延迟加载的模块有关!!)。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在尝试根据路径选择正确的路线时,Angular使用称为“首次比赛获胜”的策略。在您的应用程序根路由中,定义通配符路由。如果将AppRoutingModule放在Child1Module之前,并尝试从Child2Module重定向到Child1Module,则第一个匹配的路由将是AppRoutingModule的通配符。在这里,您有更多详细信息: https://angular.io/guide/router#define-a-wildcard-route