Angular 6-路由到惰性模块的子模块不起作用

时间:2018-06-21 11:26:25

标签: angular routes lazy-loading

我正在尝试开发一个应用程序,其中根模块将显示将加载惰性模块的路由器链接的列表:

const appRoutes: Routes = [
{
 path: 'compose',
 component: ComposeMessageComponent,
 outlet: 'popup'
},
{
 path: 'admin',
 loadChildren: 'app/admin/admin.module#AdminModule',
 canLoad: [AuthGuard]
},
{
 path: 'crisis-center',
 loadChildren: 'app/crisis-center/crisis-center.module#CrisisCenterModule',
 data: { preload: true }
}
];

在这种特殊情况下,管理模块将为自己声明的组件提供两个路由器链接,为另一个模块(管理英雄)提供一个路由器链接:

const adminRoutes: Routes = [
  {
    path: '',
    component: AdminComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: '',
        canActivateChild: [AuthGuard],
        children: [
          { path: 'crises', component: ManageCrisesComponent },
          {path: 'heroes', component: ManageHeroesComponent},
          { path: '', component: AdminDashboardComponent }
        ]
      }
    ]
  }
];

我可以导航到所有路径,但是如果去找英雄并尝试导航到它自己的路线之一(例如零),则找不到页面。英雄们的路线看起来像这样:

const manageHeroesRoutes: Routes = [
  {
    path: '',
    component: ManageHeroesComponent,
    children: [
        { path: 'zeroes', component: ManageZerosComponent },
        { path: 'friends', component: ManageFriendsComponent }
    ]
  }
];

我注意到,如果我将管理员路由中的heroes路径替换为:

children: [
  { path: 'crises', component: ManageCrisesComponent },
  {path: 'heroes', loadChildren: 'app/admin/manage-heroes/manage-heroes.module#ManageHeroesModule'},
  { path: '', component: AdminDashboardComponent }
]

我可以进入英雄路线了。但我想了解为什么不懒加载ManageHeroes模块就不能访问它们。

这里是堆叠闪电战的链接,上面复制了我的问题https://stackblitz.com/edit/angular-pm9wsz

谢谢。

3 个答案:

答案 0 :(得分:0)

在路线路径中使用组件时,您将定义一个组件来处理此路线。 Angular将仅加载该组件。在这种情况下,该组件位于其他模块中,但是角度不会加载其他模块iten,包括其路线。

在路径路径定义中使用“加载子项”时,角度将延迟加载模块和您的iten,包括其内部路由。

https://angular.io/guide/lazy-loading-ngmodules

答案 1 :(得分:0)

您的错误是您试图将crisesheroes视为AdminComponent的子路由,但它们与AdminComponent处于同一级别。尝试更正您的代码:

const adminRoutes: Routes = [
    {
        path: '',
        component: AdminComponent,
        canActivate: [AuthGuard],
    },
    {path: 'crises', component: ManageCrisesComponent},
    {path: 'heroes', component: ManageHeroesComponent}
];

现在,角度将与您将以/为基础的路线匹配为

  • admin到AdminComponent
  • admin/crises到ManageCrisesComponent
  • admin/heroes到ManageHeroesComponent

从带有角度的官方示例叉中添加了子路线: https://stackblitz.com/edit/angular-omprkj

答案 2 :(得分:0)

在ManageHeroesComponent.html中,使用<router-outlet></router-outlet>来调用子组件

  {
    path: '',
    children: [
        { path: "" , component: ManageHeroesComponent },
        { path: 'zeroes', component: ManageZerosComponent },
        { path: 'friends', component: ManageFriendsComponent }
    ]
  }
];