首页 文章

Angular2在CanActivate之前解决

提问于
浏览
6

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

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

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

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

谢谢马克斯 .

2 回答

  • 10

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

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

  • 10

    CanActivate always runs before resolve by design..

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


    1. CanActivate (认证):

    • 验证/验证用户 .

    • 获取从服务器或API查询/获取数据所需的令牌 .

    • 使用 PromiseObservable 确保解析器等待CanActivate防护完成 .

    2. Resolve (获取数据):

    • 当所有警卫都过去了,然后是解析器运行的时候了 .

    • 当您确定用户已通过身份验证时获取数据 .

    • 使用令牌等从服务器获取数据

    • 使用 PromiseObservable 确保在解析数据可用时加载组件 .

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

    • 从解析器获取数据(例如, ActivatedRoute.snapshot.data ) .

    • 渲染模板中的数据或将其发送到服务 .


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

    你可以阅读更多关于这个in this thread on GitHub的信息 .

相关问题