Angular 合并 child 个模块的路由
Angular merge routes of child modules
我正在将我的 angular 应用程序分成模块。对于一个模块,我有一个视图组件和一个编辑组件。视图组件有自己的 url(例如“/users”)。
编辑组件有一个共同的 parent 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 child)
- Root
- Admin
- Users
- Admin
- Groups
- Admin
- Permissions
但正因为如此,每次用户在页面之间切换时都会重新加载包装管理组件(重置管理组件中的菜单状态)。
是否可以这样定义这些路由?
(1 admin route with 3 children)
- 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'
,但不幸的是这并没有改变任何东西。
定义路由如
Root - Admin - Users
- Groups
- Permissions
对于 Angular 将类似于
Root - Admin - Users
- Groups
- Permissions
所以在你的 app.routing.module.ts 中正常定义路由。
export const routes: Routes = {
path: 'admin',
component: AdminComponent,
children: [
{
path: 'Users',
component: UserEditComponent
}
],
{ path: 'groups' component: GroupComponent},
{ path: 'permissions' component: PermissionComponent}
}];
您可以拥有 AdminModule,并在此模块中注入您的子模块(具有自己的路由)
例如,我有一个加载 2 个惰性模块的主应用程序路由:
- Authentication,这里我有一个注册和登录的路由(两个组件)
- Dashboard(管理员),在这里我有另一个模块,例如 ClientModule 和 ProductModule,它们显示在
outer-outlet
内部仪表板组件中,该组件还包含一个 sidenav 和一个工具栏。
OBSERVATION:
I would advice to use lazy modules at some routes for clean code, independency at unit testing and improve app performance.
我的 github 存储库中有这个示例,如果您有任何问题或建议,我可以听取:https://github.com/danidelgadoz/ngx-admin
我正在将我的 angular 应用程序分成模块。对于一个模块,我有一个视图组件和一个编辑组件。视图组件有自己的 url(例如“/users”)。
编辑组件有一个共同的 parent 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 child)
- Root
- Admin
- Users
- Admin
- Groups
- Admin
- Permissions
但正因为如此,每次用户在页面之间切换时都会重新加载包装管理组件(重置管理组件中的菜单状态)。
是否可以这样定义这些路由? (1 admin route with 3 children)
- 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'
,但不幸的是这并没有改变任何东西。
定义路由如
Root - Admin - Users
- Groups
- Permissions
对于 Angular 将类似于
Root - Admin - Users
- Groups
- Permissions
所以在你的 app.routing.module.ts 中正常定义路由。
export const routes: Routes = {
path: 'admin',
component: AdminComponent,
children: [
{
path: 'Users',
component: UserEditComponent
}
],
{ path: 'groups' component: GroupComponent},
{ path: 'permissions' component: PermissionComponent}
}];
您可以拥有 AdminModule,并在此模块中注入您的子模块(具有自己的路由)
例如,我有一个加载 2 个惰性模块的主应用程序路由:
- Authentication,这里我有一个注册和登录的路由(两个组件)
- Dashboard(管理员),在这里我有另一个模块,例如 ClientModule 和 ProductModule,它们显示在
outer-outlet
内部仪表板组件中,该组件还包含一个 sidenav 和一个工具栏。
OBSERVATION:
I would advice to use lazy modules at some routes for clean code, independency at unit testing and improve app performance.
我的 github 存储库中有这个示例,如果您有任何问题或建议,我可以听取:https://github.com/danidelgadoz/ngx-admin