无法访问URL片段父param

时间:2017-05-23 05:09:19

标签: angular

我有以下路线配置:

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.

1 个答案:

答案 0 :(得分:0)

每个激活的路由都包含自己的URL段数据。所以当你导航到:

/google/admin

将有三个细分:[ {url.path: ''}, {url.path: 'google'}, {url.path: 'admin'} ]。空路径始终存在第一个根段。

第二段将包含org中的snapshot.params.org参数。由于您需要从子细分中访问它,因此您可以使用parentpathFromRoot属性来执行此操作:

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);