問題タブ [angular-dependency-injection]

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 に答える
1210 参照

angular - 遅延読み込みモジュールでの「providedIn」による角度依存性

Angular の「遅延読み込み機能モジュール」を例として使用しています: ライブ デモ

CustomersModuleは、顧客モジュールでテスト サービスを作成する遅延読み込みモジュールです。

CustomersModule で、プロバイダーに追加します。

CustomersModule にはCustomersComponentもあり、この方法で TestService を使用できます。

しかし、CustomersModule の providers 配列から TestService を削除し、TestService で providedIn を使用すると:

私はこのエラーを受け取りました:

ここには循環的な依存関係があることを知っています。熱心にロードされたモジュールの場合、それは機能し、ツリーシェイクを有効にします。遅延読み込みモジュールでは、プロバイダー配列のみが NgModule で使用できるということですか?

これに関するガイドライン/ベストプラクティスはありますか?

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

angular - Angular の依存関係プロバイダー ファクトリにクエリ パラメーターを挿入する

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ネットで読んだところによると、プロバイダー ファクトリに非同期コード フローを使用するのは、せいぜいトリッキーです。

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

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

angular - Angular 9 - 動的パラメーターをサービス コンストラクターに挿入する方法

次の形式のバックエンド URL にリクエストを送信する必要があります。

ここで、id1id2は動的な数値です。コンストラクターで2つの引数をとるサービスを使用することを考えました。このようなものです

コンストラクターにパラメーターを挿入する方法が本当にわかりません。また、このサービスをリゾルバー内で使用する必要がありますが、リゾルバーでパラメーターを渡すにはどうすればよいですか? トークンの値は毎回変わる必要があるため、この場合、インジェクション トークンの作成は役に立たないように思えます。アイデアが尽きた