繁体   English   中英

Angular2在CanActivate之前解决

[英]Angular2 Resolve before CanActivate

我有一个身份验证服务,它实现了Resolve接口,以返回一个从服务器检索到用户身份验证状态后解析的observable。

此相同的身份验证服务实现CanActivate接口,以阻止用户在未登录的情况下访问组件。

目前,在解析resolve函数之前触发canActivate函数,这意味着它在从服务器检索登录状态之前检查用户的登录状态。

我的问题是,如何在解析resolve之前阻止调用canActivate函数,或者是否有其他方法可以实现我想要的?

谢谢马克斯。

CanActivate总是在设计解决之前运行..

因为解析器应该只在CanActivate警卫完成他们的工作(认证,清理......)之后运行。 当您遵循此模式(见下文)时,通常没有理由反转或更改此顺序。


1. CanActivate (身份验证):

  • 验证/验证用户。
  • 获取从服务器或API查询/获取数据所需的令牌。
  • 使用PromiseObservable 确保解析器等待CanActivate防护完成

2.解决 (获取数据):

  • 当所有警卫都过去了, 然后是解决方案运行的时候了
  • 在确定用户已通过身份验证时获取数据。
  • 使用令牌等从服务器获取数据
  • 使用PromiseObservable 确保在解析数据可用时加载组件

3. constructor / OnInit (使用数据):

  • 从解析器获取数据(例如,使用ActivatedRoute.snapshot.data )。
  • 渲染模板中的数据或将其发送到服务。

如果,不知何故,你真的需要等待解析器完成, 只需将代码从防护装置移动到解析器

您可以在GitHub上的这个帖子中阅读更多相关信息。

canActivate()可以返回一个booleanPromise<boolean>Observable<boolean>

如果返回Promise或Observable,则在将组件解析为true之前,无法导航组件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM