問題タブ [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.

0 投票する
3 に答える
23663 参照

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 です。

ここに画像の説明を入力

0 投票する
4 に答える
9023 参照

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同期的に使用していますが、将来変更される可能性があることに注意してください!

0 投票する
2 に答える
12132 参照

angular - ユーザーがログインしている場合、ダッシュボードへの Angular リダイレクト

私は Angular v6 を使用しています。ユーザーがログインしていない場合、ダッシュボードからログイン ページへのリダイレクトを実装しています。
次の 2 つのオプションの間で混乱しています。

  1. ログイン ガード ファイルを追加して、ログイン ステータスを確認し、ダッシュボードにリダイレクトします
  2. ルート変更イベントを検知し、こちらでログイン状態を確認してリダイレクト

この場合のより良い解決策は何ですか?

0 投票する
1 に答える
426 参照

angular - AngularFirestore からオブザーバブルを返し、ルーター ガードを解決する方法

質問: firestore を呼び出して、firestore から返されたペイロードでルーター ガードを解決するにはどうすればよいですか?

問題: firestore からの値が返され、定義されているにもかかわらず、ルート解決ガードが解決されません。

すべてが機能していますが、解決は完了しています。true を返すだけで、解決は意図したとおりに機能します。