具有延迟加载问题的角度嵌套路由

GCS*_*SDC 7 angular angular-router

我有一个应用程序,在该应用程序上我只需要在启动时提供登录功能,并且在用户进行身份验证后应该延迟加载所有剩余的代码。

我创建了一个core.module核心routing.modulecore.component来处理这个问题,但其子组件(例如DashboardComponent)正在呈现路由器出口元件内部的app.component.html,而不是在core.component.html 等标题没有被显示。

我已经搜索了很多,但找不到如何让这个工作。

app-routing.module.ts

const routes: Routes = [
  { path: '', redirectTo: 'signin', pathMatch: 'full' },
  { path: 'signin', component: SigninComponent },
  { path: 'app', loadChildren: './core/core.module#CoreModule', canLoad: [AuthGuard] },
  { path: '**', redirectTo: 'signin' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}
Run Code Online (Sandbox Code Playgroud)

应用程序组件.html

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

core-routing.module.ts

const routes: Routes = [
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  { path: 'dashboard', loadChildren: './dashboard/dashboard.module#DashboardModule', canLoad: [AuthGuard] },
  { path: '**', redirectTo: 'dashboard' }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class CoreRoutingModule { }
Run Code Online (Sandbox Code Playgroud)

核心组件.html

<div id="header">
  <app-header></app-header>
</div>
<main id="content">
  <router-outlet></router-outlet>
</main>
Run Code Online (Sandbox Code Playgroud)

仪表板-routing.module.ts

const dashboardRoutes: Routes = [
  { path: '',  component: DashboardComponent, pathMatch: 'full' }
];

@NgModule({
imports: [
  CommonModule,
  MaterialModule,
  SharedModule,
  RouterModule.forChild(dashboardRoutes)
],
Run Code Online (Sandbox Code Playgroud)

GCS*_*SDC 7

在以多种不同的方式尝试之后,对我有用的是将 core-routing.module.ts 更改为具有单个路由,并将延迟加载的模块作为子项包含在其中:

const routes: Routes = [
  {
    path: '',
    component: CoreComponent,
    children: [
      { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
      { path: 'dashboard', loadChildren: '../dashboard/dashboard.module#DashboardModule', canLoad: [AuthGuard] },
      { path: 'customers', loadChildren: '../customers/customers.module#CustomersModule', canLoad: [AuthGuard] },
      { path: 'history', loadChildren: '../history/history.module#HistoryModule', canLoad: [AuthGuard] },
      { path: 'processing', loadChildren: '../processing/processing.module#ProcessingModule', canLoad: [AuthGuard] },
      { path: '**', redirectTo: 'dashboard' }
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助尝试实现相同功能的人。