2016-11-19 108 views
2

我在我的私人路線之一有一個路線警衛,當警衛返回假時,它不再被調用。下面的例子簡化了如何重現這種情況。多次呼叫angular2路線警衛

當用戶瀏覽使用鏈接:

<a [routerLink]="['my-private-route']">Link</a> 

保護被調用,我看到控制檯和導航called消息被取消(我在後衛回false):

@Injectable() 
export class CanActivateViaAuthGuard implements CanActivate { 
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean { 
    console.log('called') 
    return false; 
    } 
} 

然而,當用戶再次點擊鏈接時,什麼也沒有發生。

爲什麼我需要這樣的行爲?我需要警惕被重複調用的原因是因爲我必須顯示模式Do you want to login? YES/NO。當用戶點擊no我想留在頁面上。但是當他決定再次導航時,我想讓他再次登錄。

有沒有什麼辦法可以阻止angular2緩存後衛結果?

+0

使用的值請提供Plunker重現。我希望這也能工作。 –

+1

@GünterZöchbauer有趣。我做了那個笨蛋,確實在那裏工作。 https://plnkr.co/edit/17CBn14zPuyrAhVnS4pA我將研究我的代碼如何不同。謝謝你:-) –

+0

@GünterZöchbauer的區別是Angular 2.2.0 vs 2.1.2。看起來這個守衛緩存出現在2.2.0中。 –

回答

4

經過@GünterZöchbauer的一些調查和幫助後,這是一個角度路由器3.2.0的奇怪行爲。已經有類似的問題:https://github.com/angular/angular/issues/12851

Here is plunker with 3.1.2 where guard is evaluated every time: 

https://plnkr.co/edit/jUhVJY?p=preview

Here is plunker with 3.2.0 where guard is evaluated only once: 

https://plnkr.co/edit/2A0Wfu?p=preview

+0

這是固定在角4嗎? – Anthony

+0

@安東尼是的。它已在下一個修補程序版本中修復。 –