問題タブ [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 - ActivatedRouteSnapshotから完全なURLをエレガントに取得するには?
私の Angular ルート ガードのいくつかでは、ログインが成功した後にリダイレクトする「次の」パスを設定したいと考えています。
したがって、通常のガードcanActivate
関数のシグネチャは次のようになります。
route
パラメータは のインスタンスですActivatedRouteSnapshot
。
以前は、「次の」URL を取得するために、route.url
. 子ルートがない限り、これは問題なく機能します。
私の例の URL は/search/advanced?query_hash=1221d3b57f5616ee16ce70fdc78907ab
で、advanced
は の子ルートですsearch
。
子ルートは で見つけることができますがroute.children
、これらの子ルート (特に複数のレベルが存在する可能性があります) を反復処理し、このように URL を結合するのは厄介で醜いように思えます。
私が興味を持っているのはroute._routerState.url
プロパティ(下の画像の下部にある文字列)に含まれていますが、それは「プライベート」変数です。
何か不足していますか?から完全な (子パスを含む) URL をエレガントに取得するにはどうすればよいActivatedRouteSnapshot
ですか? Angular のバージョンは 5.1 です。
angular5 - Angular 5/6: エラールートにリダイレクトせずにルートを保護 (ルートガード)
ピクルスが少しあります。CanActivate
ユーザーが特定のルートへのアクセスを許可されているかどうかを確認するために、ルート ガード (インターフェイスの実装) を使用しています。
これで、「/protected/foo」ルートがアクティブ化されるのを防ぐのにうまく機能しますが、アクセスしようとしているルートが禁止されていることをユーザーに伝えたいと思います (サーバーから取得する可能性のある 403 Forbidden に似ています)。
問題:
ユーザーをエラー ルートにリダイレクトせずに、この特別なエラー ビューを表示するにはどうすればよいでしょうか。
そしてRouteGuard
、禁止されたルートを実際にロードせずに my を使用するにはどうすればよいですか? my 内のアクセスをチェックしてFooViewComponent
別のビューを表示するとRouteGuard
、そもそも持っているポイントが無効になるからです。
RouteGuard
理想的には、メソッドでfalse を返すだけでなくcanActivate()
、コンポーネントを完全に say に置き換えたいと思いますErrorForbiddenViewComponent
。しかし、それを行う方法がわかりません。または、イベントが可能ですか。代替案はありますか?
これは私のルートガードが今どのように見えるかです:
したがって、ルートのロードを妨げているだけですが、リダイレクトはしていません。ログに記録されていない訪問者のみをログイン ルートにリダイレクトします。
理由:
- ルートはアプリケーションの特定の状態を反映する必要があります - ルート URL にアクセスすると、その状態が再作成されます
- エラー ルート (404 Not Found を除く) を持つことは、アプリケーションが実際にエラー状態を再現できることを意味します。なぜアプリケーションの状態としてエラー状態を保持するのでしょうか? デバッグの目的で、ログ (コンソールまたはサーバー) を使用する必要があります。エラー ページに再度アクセスすると (ページの更新など)、ログが妨げられる可能性があります。
- また、エラー ルート アプリにリダイレクトすることで、ユーザーにエラーの洞察を提供する必要があります。さらに言えば、いくつかのパラメーターを url 経由で渡すか、(さらに悪いことに) エラー サービスでエラー状態を維持し、エラー ルートにアクセスするときにそれを取得する必要があります。
- また、RouteGuard を無視してコンポーネントをロードし、その中のアクセスをチェックすると、(ユーザーが許可されていないため) とにかく使用されない余分な依存関係がロードされる可能性があり、遅延ロード全体がはるかに困難になります。
誰かがこれに対する何らかの解決策を持っていますか? また、Angular 2+ が長い間存在していた後、誰もこの種の状況を経験しなかったのはどうしてだろうか? 誰もがリダイレクトで大丈夫ですか?
また、私は現在FooViewComponent
同期的に使用していますが、将来変更される可能性があることに注意してください!
angular - ユーザーがログインしている場合、ダッシュボードへの Angular リダイレクト
私は Angular v6 を使用しています。ユーザーがログインしていない場合、ダッシュボードからログイン ページへのリダイレクトを実装しています。
次の 2 つのオプションの間で混乱しています。
- ログイン ガード ファイルを追加して、ログイン ステータスを確認し、ダッシュボードにリダイレクトします
- ルート変更イベントを検知し、こちらでログイン状態を確認してリダイレクト
この場合のより良い解決策は何ですか?
angular - AngularFirestore からオブザーバブルを返し、ルーター ガードを解決する方法
質問: firestore を呼び出して、firestore から返されたペイロードでルーター ガードを解決するにはどうすればよいですか?
問題: firestore からの値が返され、定義されているにもかかわらず、ルート解決ガードが解決されません。
すべてが機能していますが、解決は完了しています。true を返すだけで、解決は意図したとおりに機能します。