canActivate取决于父路线解决

Joh*_*ohn 8 angular

我有这样的路线设置:

export const APP_ROUTES: Routes = [
    {
        path: '',
        resolve: {
            user: CurrentUserResolver
        },
        children: [
            {
                path: ':sectionKey',
                canActivate: [SectionAccessGuard],
                children: [
                    {
                        path: 'dashboard',
                        component: DashboardComponent
                    }
                ]
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

父路由将通过HTTP调用检索用户,并且我希望:sectionKey仅当当前用户有权访问我的子路由时才激活.问题是,看起来我的canActivate SectionAccessGuard是在完全填充快照之前调用的:

@Injectable()
export default class SectionAccessGuard implements CanActivate {
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        console.log(route.data);
        console.log(route);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制台中,第一个条目什么都没有; 但是,第二个条目最终将user填充该字段.

我知道该canActivate方法也可以返回一个Observable<boolean>,但是我没有看到任何关于如何等到解析完成的钩子.

我在这里错过了什么?我觉得这应该是非常直接的.我目前正在使用angular v4.0.0-rc.2

Yak*_*ain 0

我不确定是否可以在解析器完成后强制执行防护,但我会尝试将代码从解析器移至 canActivate() 中。

当获取当前用户信息的可观察对象返回数据时,应用您的逻辑来检查是否允许用户导航到该路线。