【问题标题】:Angular Routing Lazy Load Children's ChildrenAngular Routing Lazy Load Children's Children
【发布时间】:2017-10-16 14:54:03
【问题描述】:

我目前对 Angular Routing 的工作方式感到困惑,需要一些帮助。基本上在我的项目中,我有一个用于加载所有根路由的核心模块,主页如下:

const routes: Routes = [
  {path: '', redirectTo: '/login', pathMatch: 'full'},
  {path: 'user', loadChildren: 'app/userManagement#UserModule', pathMatch: 'full',canActivate: [AuthGaurd] },
  {path: '**', component: PageNotFoundComponent}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})


export class AppRoutingModule {}

在 app/userManagement 文件夹中,我有一个 index.ts 用于导入并声明所有模块:

@NgModule({
  imports: [
    SharedModule,
    UserManagementRoutingModule
  ],
  declarations: [UserHomeComponent, UserListComponent, UserDetailsComponent]
})
export class UserModule {
}

我的子路由放在 UserManagementRoutingModule 内:

const routes: Routes = [
  {
    path: '',
    component: UserHomeComponent,
  },
  {
    path: 'userDetails',
    component: UserDetailsComponent
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class UserManagementRoutingModule {
}

以这种方式,当我转到 http://hostname/user 时,它将直接指向我的 UserHomeComponent 组件,但是如果我转到 http://hostname/user/userDetails,Angular 不会重定向到该页面。我应该如何编辑我的代码以便我可以访问 userDetailsComponent?

谢谢

【问题讨论】:

    标签: angular lazy-loading angular-routing


    【解决方案1】:

    延迟加载时,最佳做法是将空白路径下的所有路由定义为子路径。另外,您需要确保在您的@ngModules 中导入CommonModuleBrowserModule(在您的情况下,因为它是一个孩子,您将使用common)。

    @NgModule({
      imports: [
        CommonModule,
        SharedModule,
        UserManagementRoutingModule
      ],
      declarations: [UserHomeComponent, UserListComponent, UserDetailsComponent]
    })
    export class UserModule {
    }
    

    以上将确保正确加载组件,以下将提供最佳实践路由。

    const routes: Routes = [
      {
        path: '',
        children: [
          { path: '', component: UserHomeComponent },
          { path: 'userDetails', component: UserDetailsComponent }
        ]
      }
    ];
    
    @NgModule({
      imports: [RouterModule.forChild(routes)],
      exports: [RouterModule]
    })
    export class UserManagementRoutingModule {
    }
    

    【讨论】:

    • 我认为您的解决方案根本不会延迟加载。
    • 对不起,你刚刚完成了他的代码,现在我明白了。
    • 这是正确的方法,实际上我还需要删除“pathMatch:'full'”语句,然后代码才能正常工作。谢谢!
    • 这真的是延迟加载子组件吗?还是只加载父组件?
    • @JenuelGanawed 它延迟加载 UserModule 以及与该模块关联的所有组件。如果您想要更深入的延迟加载,您需要创建另一个子模块并以类似的方式进行延迟加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多