我有这样的路线设置:
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
我不确定是否可以在解析器完成后强制执行防护,但我会尝试将代码从解析器移至 canActivate() 中。
当获取当前用户信息的可观察对象返回数据时,应用您的逻辑来检查是否允许用户导航到该路线。
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |