Angular 组件不会使用空路径加载到默认插座中,但会使用插座名称。不要相信还有其他匹配的路线

问题描述 投票:0回答:0

我的应用程序组件中有几个路由器插座。除了一个,其他都有名字。

<router-outlet name="menu"></router-outlet>
<router-outlet></router-outlet>
<router-outlet name="sidebar"></router-outlet>

目前,我的根路由配置指定以下内容:

[
  {
    path: 'mypath',
    loadChildren: () => import('./my-main.module').then((m) => m.MyMainModule)
  }
]

延迟加载的“主模块”路由配置如下所示:

[
  {
    path: ':myMainId',
    resolve: { myMainData: MyMainDataResolver },
    children: [
      {
        path: ':mySubId',
        resolve: { mySubData: MySubDataResolver },
        loadChildren: () =>
          import('./my-sub.module').then((m) => m.MySubModule) // Needs mySubData
      },
      { path: '', component: MyMainComponent } // Needs myMainData
    ],
  },
  { path: '', component: MenuComponent, outlet: 'menu' }
]

最后,我的延迟加载的“子模块”路由配置如下所示:

[{ path: '', component: MySubComponent, outlet: 'sidebar' }]

使用上述配置,我的 MyMainComponent 不会加载(未调用构造函数/onInit)。但是,如果我给默认路由器出口一个名称并在路由配置中的 for MyMainComponent 中指定出口名称,则所有组件都会呈现。

类似地,如果我删除 url 的 :mySubId 段,并让主出口无名,MyMainComponent 会渲染。

所以,MyMainComponent 的路由和 MySubComponent 的路由(或其父路由)之间似乎发生了某种冲突。

我怀疑这与这两条路线都是空的有关,并且可能都以某种方式匹配,但我不明白当一条指定了出口而另一条没有指定出口时会怎样。

提前感谢您提供的任何帮助。

angular angular-router angular-module
© www.soinside.com 2019 - 2024. All rights reserved.