我有一个身份验证服务,它实现了Resolve接口,以返回一个从服务器检索到用户身份验证状态后解析的observable。
此相同的身份验证服务实现CanActivate接口,以阻止用户在未登录的情况下访问组件。
目前,在解析resolve函数之前触发了canActivate函数,这意味着它在从服务器检索登录状态之前检查用户的登录状态。
我的问题是,如何在解决问题之前阻止调用canActivate函数,或者以其他方式实现我想要的东西?
由于 最大
答案 0 :(得分:12)
CanActivate始终在设计解析之前运行..
..因为解析器应该只在CanActivate警卫完成他们的工作(认证,清理......)之后运行。当您遵循此模式(见下文)时,通常没有理由反转或更改此顺序。
<强> 1。 CanActivate (身份验证):
Promise
或Observable
确保解析器等待CanActivate警卫完成。<强> 2。解决(获取数据):
Promise
或Observable
确保在解析数据可用时加载组件。第3。构造函数/ OnInit (使用数据):
ActivatedRoute.snapshot.data
)。如果不知何故,你真的需要等待解析器完成,只需将代码从防护装置移动到解析器。
您可以阅读有关此in this thread on GitHub的更多信息。
答案 1 :(得分:10)
canActivate()可以返回boolean
,Promise<boolean>
或Observable<boolean>
。
如果您返回Promise或Observable,则在将它们解析为true
之前,无法导航该组件。