window.location
理想的には慣用的な Angular の方法で、依存関係プロバイダー ファクトリの本体に渡される検索パラメーターの値が必要です。
ユース ケース: 初めての Angular アプリを作成する あるポートでアプリを実行し、別のポートでバックエンド サーバーを実行しています。URLに追加&backend=localhost:12345
して、アプリがそのホストと通信できるようにします。これは読み取り専用で、URL バーに手書きされています。そのような URL に移動したくありません。
検討されたアプローチ:
window.location.href
直接使用してください。コードをブラウザーに依存させ、テスト フィクスチャや、ブラウザー外でコードを実行しようとするその他のものを破壊する可能性があります。- を使用し
PlatformLocation.href
ます。ドキュメントには、「このクラスは、アプリケーション開発者が直接使用するべきではありません」と記載されています。</li> - を使用し
Location.path()
ます。動作しているように見えますが、完全な URL にアクセスする方法も提供していないようです。スタンドアロン パスにはクエリ パラメータが含まれていますが、URL
コンストラクタへの引数としては無効のように見えるため、最終的にnew URL('http://no-such-host/' + location.path()).searchParams.get('backend')
. ほとんどエレガントではありません。 ActivatedRoute.queryParams
なんとなく使う。ファクトリに を注入するActivatedRoute
と、明らかにデフォルトのインスタンス ( として文字列化Route(url:'', path:'')
) が得られるため、クエリ パラメータがないように見えます。queryParams
メソッドは を返しますが、Observable
ネットで読んだところによると、プロバイダー ファクトリに非同期コード フローを使用するのは、せいぜいトリッキーです。
ファクトリがクエリ パラメータに基づいて決定を下せるようにするためのより良い方法はありますか?