如何将 child 组件设置为 router-outlet 的默认路由?
How to set a child component as a default route for a router-outlet?
我正在使用 Lazyloading
并且我有两个 router-outlets
。当我想导航到另一条 child 路线时出现问题。我得到这个错误,
TypeError: Cannot read property 'split' of undefined
at defaultUrlMatcher (router.js:566)
at match (router.js:2221) .....
我的主要 app-router 模块看起来像,
const appRoutes: Routes = [
{ path: '', redirectTo: 'web/welcome' , pathMatch: 'full' },
{ path: 'web', redirectTo: 'web/welcome' , pathMatch: 'full' },
{
path: 'web',
loadChildren: 'app/core/website/modules/website.module#WebSiteModule',
data: { preload: true }
},
{
path: 'dbapp', canActivate: [AuthGuardService],
loadChildren: 'app/core/database/modules/db.module#DbModule',
data: { preload: true }
},
{ path: '**', redirectTo: '/404', pathMatch: 'full'},
{ path: '**', component: NotFoundComponent, data: { message: 'We Could Not Serve Your Request!'}},
];
并且 dbapp
我有这个路由模块,
const dbRoutes: Routes = [
{
path: '',
component: DbHomeComponent,
data: { preload: true },
pathMatch: 'full',
children: [
{ path: '', component: UserDashboardComponent },
{
path: 'registry',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['reg'] } },
loadChildren:
'app/core/database/database-cores/registry-core/modules/registry.module#RegistryModule'
// canActivateChild: [RoleGuardService]
},
{
path: 'embryology',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['emb'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
},
{
path: 'nursing',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['nur'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
}
]
},
];
我的地图如下所示,
Router Map,下划线components
是router-outlets
所以根据我的配置。路由从 https://www.artngcore.com:4200/web/welcome
开始,身份验证后路由更改为 https://www.artngcore.com:4200/dbapp
我设法导航到 UserDashboardComponent
作为默认路由,我的问题是如果我路由到另一个 children,即 routerLink="/dbapp/registry"
如何将 child 组件显示为默认路由并导航到其他 children 路由?
已解决,答案来源于、
所以我的dbapp
路由模块应该是这样的,
const dbRoutes: Routes = [
{
path: '',
component: DbHomeComponent,
data: { preload: true },
children: [
{ path: '', component: UserDashboardComponent },
{
path: 'registry',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['reg'] } },
loadChildren:
'app/core/database/database-cores/registry-core/modules/registry.module#RegistryModule'
// canActivateChild: [RoleGuardService]
},
{
path: 'embryology',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['emb'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
},
{
path: 'nursing',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['nur'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
}
]
}
];
我只需要更改路由匹配策略即可,pathMatch: 'full'
不应该包含
我正在使用 Lazyloading
并且我有两个 router-outlets
。当我想导航到另一条 child 路线时出现问题。我得到这个错误,
TypeError: Cannot read property 'split' of undefined at defaultUrlMatcher (router.js:566) at match (router.js:2221) .....
我的主要 app-router 模块看起来像,
const appRoutes: Routes = [
{ path: '', redirectTo: 'web/welcome' , pathMatch: 'full' },
{ path: 'web', redirectTo: 'web/welcome' , pathMatch: 'full' },
{
path: 'web',
loadChildren: 'app/core/website/modules/website.module#WebSiteModule',
data: { preload: true }
},
{
path: 'dbapp', canActivate: [AuthGuardService],
loadChildren: 'app/core/database/modules/db.module#DbModule',
data: { preload: true }
},
{ path: '**', redirectTo: '/404', pathMatch: 'full'},
{ path: '**', component: NotFoundComponent, data: { message: 'We Could Not Serve Your Request!'}},
];
并且 dbapp
我有这个路由模块,
const dbRoutes: Routes = [
{
path: '',
component: DbHomeComponent,
data: { preload: true },
pathMatch: 'full',
children: [
{ path: '', component: UserDashboardComponent },
{
path: 'registry',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['reg'] } },
loadChildren:
'app/core/database/database-cores/registry-core/modules/registry.module#RegistryModule'
// canActivateChild: [RoleGuardService]
},
{
path: 'embryology',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['emb'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
},
{
path: 'nursing',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['nur'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
}
]
},
];
我的地图如下所示,
components
是router-outlets
所以根据我的配置。路由从 https://www.artngcore.com:4200/web/welcome
开始,身份验证后路由更改为 https://www.artngcore.com:4200/dbapp
我设法导航到 UserDashboardComponent
作为默认路由,我的问题是如果我路由到另一个 children,即 routerLink="/dbapp/registry"
如何将 child 组件显示为默认路由并导航到其他 children 路由?
已解决,答案来源于
所以我的dbapp
路由模块应该是这样的,
const dbRoutes: Routes = [
{
path: '',
component: DbHomeComponent,
data: { preload: true },
children: [
{ path: '', component: UserDashboardComponent },
{
path: 'registry',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['reg'] } },
loadChildren:
'app/core/database/database-cores/registry-core/modules/registry.module#RegistryModule'
// canActivateChild: [RoleGuardService]
},
{
path: 'embryology',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['emb'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
},
{
path: 'nursing',
canActivate: [RoleGuardService],
data: { expectedRole: { roles: ['nur'] } },
loadChildren:
'app/core/database/database-cores/embryology-core/modules/embryology-routing.module#EmbryologyRoutingModule'
}
]
}
];
我只需要更改路由匹配策略即可,pathMatch: 'full'
不应该包含