[英]Why is the Angular canActivate function guard executed twice when navigating routes
我正在使用Angular 5並定義了幾個路由。 當我導航路線並在canActivate功能保護上放置一個斷點時,我看到它被執行了兩次。
我問這個是因為我必須在每個canActivate調用上調用外部服務,並且多次無用地執行相同的服務會導致不必要的開銷。
剛發生在我身上,問題出在我的AuthGuard
這個片段:
setActiveWebsite(website: string): void {
this._website.next(website);
this.router.navigate([]); <-- This line here
}
它執行了兩次,因為它設置了一個值,重定向,然后跳過auth,因為它立即解析為true
。
你可能在你的一個guards
或resolvers
使用route.navigate
或重定向嗎?
Angular 7.1使用router.parseUrl()方法解決了這個問題,該方法將路徑名(在路由模塊中設置)作為參數。
因此,而不是router.navigate(['__'])
或router.navigateByUrl('__')
,順便說一句,如果用作重定向,則應該返回false返回 ,你會做優雅的return router.parseUrl('____')
。
我已經用盡了之前方法的許多變化,我現在計划我的日歷圍繞一個嚴格由角度保護邏輯組成的日歷。
每次我想要檢查日歷時,無需讓我回家,這個新的parseUrl()升級大大改善了我的生活。
它運行了幾次,因為路由器有幾個要處理的事件。 您可以測試這是否是這樣的最后一個事件。
this.router.events.subscribe(event => {
if(event instanceof NavigationEnd) {
// Last event, do your thing
}
});
canActivate
不是被多次執行,而是您訂閱的事件。 在你的情況下,它將是router
事件。
你可以只觀看最后一個是NavigationEnd
事件,正如@trichetriche在另一個答案中所解釋的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.