自分のプライベートルートの1つにルートガードがあります。ガードがfalseを返すと、もうもうコールされません。次の例は、このような状況を再現する方法を簡略化したものです。angular2ルートガードを複数回呼び出す
ユーザーがリンクを使用してナビゲートする場合:
<a [routerLink]="['my-private-route']">Link</a>
ガードが呼び出されると、私は(私はガードでfalse
を返す)コンソールとナビゲーションでcalled
メッセージがキャンセルされて参照してください。
@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キャッシングガードの結果を停止する方法はありますか?
再現するためには、Plunkerを提供してください。私はこれも同様に動作すると思います。 –
@GünterZöchbauer興味深い。私はそのプランカを作って、実際にそこで働いています。 https://plnkr.co/edit/17CBn14zPuyrAhVnS4pA私のコードがどのように違うのか調べてみましょう。ありがとうございました:-) –
@GünterZöchbauer違いは、角度2.2.0対2.1.2でした。このようなガードキャッシングは2.2.0に現れます。 –