子模块的 Angular 合并路线

标签 angular angular-routing

我正在将我的 Angular 应用程序划分为模块。对于模块,我有一个 View 组件和一个编辑组件。 View 组件有自己的 url(例如“/users”)。

编辑组件有一个共同的父 URL(例如“/admin/users”)。

 - UserModule
     - UserPageComponent ('/user/:username')
     - UserEditComponent ('/admin/user/:username')
 - GroupModule
     - GroupPageComponent ('/group/:groupname')
     - GroupEditComponent ('/admin/group/:groupname')

这确实有效,并且 URL 可以访问。

如果我用 augury 查看路由,我会发现 Angular 将每个“/admin”路由定义为单独的路由: (3 条管理路线,每条 1 个子路线)

- Root
    - Admin
        - Users
    - Admin
        - Groups
    - Admin
        - Permissions

但正因为如此,每次用户在页面之间切换时,都会重新加载包装管理组件(重置管理组件中的菜单状态)。

可以这样定义这些路由吗? (1 个管理路线,有 3 个 child )

- Root
    - Admin
        - Users
        - Groups
        - Permissions

目前我使用此代码定义每个子模块中的路由(替换每个其他模块的Users)。

export const routes: Routes = {
  path: 'admin',
  component: AdminComponent,
  children: [
    {
      path: 'Users',
      component: UserEditComponent
    }
  ]
}];

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

在主路由模块中我只是这样做:

@NgModule({
  imports: [RouterModule.forRoot([])],
  exports: [RouterModule]
})
export class AppRoutingModule {}

我尝试在 forRoot() 调用上将 onSameUrlNavigation 设置为 'ignore',但不幸的是这并没有改变任何内容。

最佳答案

您可以拥有AdminModule,并在此模块内注入(inject)您的子模块(具有自己的路由)

例如,我有一个加载 2 个惰性模块的主应用程序路由:

  • 身份验证,这里我有一个用于注册和登录的路由(两个组件)
  • 仪表板(管理员),在这里我有另一个模块,例如 ClientModule 和 ProductModule,它们显示在仪表板组件内的 outer-outlet 中,该组件还包含 sidenav 和工具栏。

enter image description here

OBSERVATION:

I would advice to use lazy modules at some routes for clean code, independency at unit testing and improve app performance.

enter image description here

我的 github 存储库中有这个示例,如果您有任何问题或建议,我可以聆听:https://github.com/danidelgadoz/ngx-admin

关于子模块的 Angular 合并路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916727/

相关文章:

javascript - 为什么需要 $scope.$apply 来更新这个数组

javascript - 当 Angular 4 中的路线发生变化时,Google Chart "Container is not defined"

dart - AngularDart RouteData 不可用

angular - 如何根据环境从构建过程中排除组件。多变的?'

angular - 是否可以通过更改监听器检索在表单控件中选择的选项的编号?

javascript - 如何在 JBoss 服务器中使用 typescript 部署 Angular 2?

Angular 无法使用不同数量的 child 重新附加 ActivatedRouteSnapshot

javascript - Angular2 intelliJ 配置错误..找不到模块 '@angular/core'

angular - router.navigate 之后未调用 ngOnInit

javascript - Angular - 在自路由更改时重新创建组件