2

window.location理想的には慣用的な Angular の方法で、依存関係プロバイダー ファクトリの本体に渡される検索パラメーターの値が必要です。

ユース ケース: 初めての Angular アプリを作成する あるポートでアプリを実行し、別のポートでバックエンド サーバーを実行しています。URLに追加&backend=localhost:12345して、アプリがそのホストと通信できるようにします。これは読み取り専用で、URL バーに手書きされています。そのような URL に移動したくありません。

検討されたアプローチ:

  1. window.location.href直接使用してください。コードをブラウザーに依存させ、テスト フィクスチャや、ブラウザー外でコードを実行しようとするその他のものを破壊する可能性があります。
  2. を使用しPlatformLocation.hrefます。ドキュメントには、「このクラスは、アプリケーション開発者が直接使用するべきではありません」と記載されています。</li>
  3. を使用しLocation.path()ます。動作しているように見えますが、完全な URL にアクセスする方法も提供していないようです。スタンドアロン パスにはクエリ パラメータが含まれていますが、URLコンストラクタへの引数としては無効のように見えるため、最終的にnew URL('http://no-such-host/' + location.path()).searchParams.get('backend'). ほとんどエレガントではありません。
  4. ActivatedRoute.queryParamsなんとなく使う。ファクトリに を注入するActivatedRouteと、明らかにデフォルトのインスタンス ( として文字列化Route(url:'', path:'')) が得られるため、クエリ パラメータがないように見えます。queryParamsメソッドは を返しますが、Observableネットで読んだところによると、プロバイダー ファクトリに非同期コード フローを使用するのは、せいぜいトリッキーです。

ファクトリがクエリ パラメータに基づいて決定を下せるようにするためのより良い方法はありますか?

4

1 に答える 1