我有以下路线配置:
const routes: Routes = [
{
path: ':org',
component: OrgComponent,
resolve: {
org: OrgResolver,
},
children: [
{
path: 'events',
component: EventsListComponent,
},
...orgAdminRoutes
]
}
];
export const orgAdminRoutes: Route[] = [
{
path: 'admin',
component: AdminComponent,
canActivate: [
AdminGuard
],
children: [
{
path: 'users',
component: UsersComponent
}
]
},
];
orgAdminRoutes
位于不同的文件中。
然而,当我点击http://localhost:4200/google/admin
之类的路线时,虽然它尝试导航到AdminComponent,但CanActivate防护会触发,但显然无法看到父URL片段。当我在console.log中激活ActivatedRouteSnapshot时,url
参数只有一个元素(' admin')尽管_urlSegment
有2个符合预期(不知道是否&#39} ; s预期行为),param
为空。
我是否应该无法访问:org
网址参数?我需要它来保护我,但不知道为什么我无法看到它。
如果重要的话,我正在运行Angular 4.0.x.
答案 0 :(得分:0)
每个激活的路由都包含自己的URL段数据。所以当你导航到:
/google/admin
将有三个细分:[ {url.path: ''}, {url.path: 'google'}, {url.path: 'admin'} ]
。空路径始终存在第一个根段。
第二段将包含org
中的snapshot.params.org
参数。由于您需要从子细分中访问它,因此您可以使用parent
或pathFromRoot
属性来执行此操作:
class AdminComponent {
constructor(r: ActivatedRoute) {
console.log(r.parent.snapshot.params.org);
console.log(r.pathFromRoot[1].snapshot.params.org);
}
您可以在警卫中获得相同的信息:
canActivate(snapshot) {
console.log(snapshot.parent.params.org);