問題タブ [angular-router-guards]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - 間違ったルート ナビゲーション動作を引き起こすルート ガード
別のルートをナビゲートしようとすると問題が発生します。
2 つの異なるルート モジュールがあります。
app.routes.ts :
のみを含むLoginPage:
PreventLoggedInAccess.canActivateを使用/appすると、ユーザーが既にログインしている場合、プレフィックスと子ルートを使用してログイン セクションにリダイレクトされますhome。次のように定義されています。
pages.routes.ts :
/appユーザーがログインしている場合にのみアクセスできるすべてのサブルートを含みます。これは次を使用して実現されAuthGuardService.canActivateChildます。
/loginユーザーがログインしていない場合にリダイレクトする後者を使用します。次のように定義されます。
app/homeからにナビゲートすると、2回ナビゲートapp/contentsした後にのみに移動します。ContentsComponentしたがって、2 回実行this._router.navigate(['app/components']);すると機能し、1 回だけ実行すると、ルートが からapp/homeに1app/routeミリ秒の間変更されて に戻りますがapp/home、2 回実行するとルートが変更されます。一方、私が入っapp/contentsてナビゲートしようとすると、app/homeルートがうまく変わります。
isAuthenticated正常に動作します。どちらの authguards も問題なく動作するため、appログインしていないときに子ルートにアクセスしようとすると、ログインにリダイレクトされ、ログインしてloginいるときにアクセスしようとすると、にリダイレクトされapp/homeます。
少しデバッグすることができたので、次のフローに気付きました。
- 最初の試行 -
app/home->app/contents:navigate(['app/contents'])と呼ばれるPreventLoggedInAccess.canActivateと呼ばれるAuthGuardService.canActivateChildと呼ばれる
- 2 回目の試行 -
app/home->app/contents:navigate(['app/contents'])と呼ばれるAuthGuardService.canActivateChildと呼ばれる
もちろん、予想される動作は 2 番目のものです。
編集
this._router.navigate([/app/home]);から削除PreventLoggedInAccess.canActivateすると問題が解決します
しかし、それでも、子供に接続されているにもかかわらず、子供に移動するときに呼び出される理由がわかりませんか? 最初の試行でのみ呼び出されるのはなぜですか?PreventLoggedInAccess.canActivateappAuthGuardService.canActivateChild
angular - Guard の this.router.navigate は、将来のルートをブロックします
Angular 4 で 2 つのガードを設定しました。保護されたルートに到達しようとしたときにユーザーをログイン ページにリダイレクトするガードと、まだ行っていない場合は「ホーム」からウェルカム ページにリダイレクトするガードです。
警備員自体は美しく機能します...しかし、非常に奇妙な動作に気付きました. this.router.navigateWelcomeTraveler ガードにリダイレクトを追加すると、ログインした後でも、最初のガードから保護されたルートにアクセスできない状態になります。ホームページに送り返され続けます。
これが私の警備員です:
ルーティング テーブルのスニペットを次に示します。
ガード内に が存在すること自体が問題を引き起こしているようthis.router.navigateです。WelcomeTravelerログインすると、プロファイルへのルーティングを試みた直後 (最初のガードを正常に通過した後) に「ホーム」に戻されます。ナビゲート行を削除すると、問題は解決します。
何か案は?