Angular 7,命名路由器插座在延迟加载模块中不起作用

ant*_*oom 5 typescript angular-routing angular

所以我面临着著名的角度路由问题“带有延迟加载模块的命名插座”。这个问题似乎已经结束,这个人提供了一个可行的解决方案,我一直在关注。但是我仍然收到错误并且无法理解这个问题的本质

错误:无法匹配任何路由。网址段:

我尝试使用 pathMatch: 'full' 和不同的重定向路由到不同的组件,但最终总是得到相同的错误。

我已经被困了几个小时,这就是为什么决定在这里提问。我的问题在哪里,我缺少什么?

我的设置

app.routing.ts:

 const routes: Routes = [
      {
        path: '',
        loadChildren: 'app/home/home.module#HomeModule',
      },
      {
        path: 'admin',
        loadChildren: 'app/admin/admin.module#AdminModule',
      },
      {
        path: 'data',
        loadChildren: 'app/data/data.module#DataModule',
      },
      {
        path: '**',
        redirectTo: ''
      }
    ];
Run Code Online (Sandbox Code Playgroud)

应用程序组件.html

<app-header></app-header>
<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

data.routing-module.ts

    const routes: Routes = [
  {
    path: 'summary',
    component: SummaryComponent,
    canActivate: [AuthGuard],
  },
  {
    path: 'management/:id',
    component: DataComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: 'activities',
        component: ActivitiesComponent,
        outlet: 'activities',
      },
      {
        path: 'researches',
        component: ResearchesComponent,
        outlet: 'researches',
      }
    ]
  },
  {
    path: 'review/:id',
    component: InfoComponent,
    canActivate: [AuthGuard],
  },
];
Run Code Online (Sandbox Code Playgroud)

数据组件.html

<mat-drawer-container class="docs-viewer-container">

  <mat-drawer position='start' [mode]='mode'>
    <router-outlet name="activities"></router-outlet>
  </mat-drawer>

  <mat-drawer position='end' [mode]='mode'>
    <router-outlet name="researches"></router-outlet>
  </mat-drawer>

  <mat-drawer-content>
    ... 
     // content
    ...
  </mat-drawer-content>

</mat-drawer-container>
Run Code Online (Sandbox Code Playgroud)

因此,对于数据模块的着陆页是总结部分用户点击链接,导航URL路径看起来像这样以后:'path/data/summary?params'。Summary.component 有导航功能

  onActivitySelection(event) {

    this.queryParams.offset = 0;
    this.queryParams.limit = 25

    this.router.navigate([{
        outlets: {
          'activities': '/data/management/' + event.id + '/activities'
        }
      }],
      {
        queryParams: this.queryParams
      })
  }
Run Code Online (Sandbox Code Playgroud)

如您所见,重定向路由必须是“/data/management/:id/activities”。但是错误说找不到这条路线。

那么有人可以帮我解决我的问题吗?

She*_*ong 4

尝试将模块的路由容纳在索引组件中。您有一个用于应用程序模块的路由器出口,但没有它下面的任何级别。

对于数据模块的路由:

{
    path: '', component: DataIndexComponent, canActivate: [AuthGuard],
    children: [
      {
       path: 'summary',
       component: SummaryComponent
      },
      ...[restOfRoutes]
      ]
}
Run Code Online (Sandbox Code Playgroud)

在 DataIndexComponent 中添加<router-outlet></router-outlet>.

另一方面,如果您使用相同的身份验证防护,则可以将其放置在模块的索引级别上。