簡體   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