angular – canActivate取决于父路线解析

前端之家收集整理的这篇文章主要介绍了angular – canActivate取决于父路线解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的路线设置:
  1. export const APP_ROUTES: Routes = [
  2. {
  3. path: '',resolve: {
  4. user: CurrentUserResolver
  5. },children: [
  6. {
  7. path: ':sectionKey',canActivate: [SectionAccessGuard],children: [
  8. {
  9. path: 'dashboard',component: DashboardComponent
  10. }
  11. ]
  12. }
  13. ]
  14. }
  15. ]

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

  1. @Injectable()
  2. export default class SectionAccessGuard implements CanActivate {
  3. canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot) {
  4. console.log(route.data);
  5. console.log(route);
  6. return true;
  7. }
  8. }

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

我知道canActivate方法可以返回一个Observable< boolean>同样,但我没有看到任何关于如何等待,直到解决完成的钩子.

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

我发布此消息已经过去了大约8个月,所以我会更新我们最终的结果:

通过解析在路由器中存储数据开始变得非常尴尬取决于组件的位置(this.route.parent.parent.parent.data.user),所以我们不再使用解析,而是使用NgRx来存储一种信息.

然后我们的警卫负责触发数据的获取,并等待它完成.像这样的东西:

  1. @Injectable()
  2. export class AuthenticationGuard implements CanActivate {
  3. constructor(private router: Router,private store: Store<ApplicationState>) { }
  4.  
  5. canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot) {
  6. this.store.dispatch(new AuthenticateAction());
  7.  
  8. return this.store
  9. .select('auth')
  10. .filter((s) => !!s && !s.authenticating)
  11. .map((s) => s.authenticated)
  12. .take(1);
  13. }
  14. }

在州内有几个标志(经过身份验证和验证),告诉警卫我们在这个过程中的位置.

猜你在找的Angularjs相关文章