問題タブ [angular2-di]

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 投票する
1 に答える
651 参照

angular - クラスをオーバーライドするAngular2提供

アプリの 1 か所で http エラーを処理するカスタム Http プロバイダーを作成しました。RC4では、これを達成するためにアプリをブートストラップしていました:

リリース バージョンを実行している今、同様のことを行うにはどうすればよいですか? どういうわけかメインの app.module で provide を使用できますか?

ありがとう!

0 投票する
0 に答える
2311 参照

angular - Angular2 DI: @NgModule の下に依存関係を注入する方法は?

TL;DR 25.10.16: 更新

私はまだ正しい解決策について心配しているので、より明確にするためにタイトルの名前を変更しました.

与えられたモジュール

私の質問は次のとおりです。このように渡された構成で依存関係を注入できる可能性はありますか?

  1. ExternalModule.forRoot(@Inject(MyConfig) config : MyConfig)
  2. providers: [EXTERNAL_PROVIDERS(@Inject(MyConfig) config)] (

{provide: xxx, deps :[xxx], useFactory : xxx}特定の外部プロバイダーごとに作成したくありません。

hereApplication Wide Service Locatorで説明されているように、ルート インジェクターにアクセスしてa を初期化しようとしましたが、Angular 2.1.0では期待どおりに動作しません。ngDoBootstrap

----------

古い投稿:

Angular2 で外部のサード パーティ ライブラリ プロバイダーを構成するための正しいパターンを知りたいです。

例を見てみましょう (Typescript のコード サンプル):

プロバイダーを公開し、configオブジェクト リテラルによっていくつかの構成オプションを提供するライブラリがあります。

次に、クライアント側で、これらのプロバイダーを以下に含めることができます@NgModule

しかし、構成オブジェクト自体が のような既存のサービスに依存している場合はどうなるMyServiceでしょうか? providers 配列に依存関係を挿入できません。私の観点からの唯一の方法は、FactoryProviderを使用することです:

MyConfigそれを考えると、どうすればに注入できTHIRD_PARTY_PROVIDERSますか?


私が思いついた唯一の解決策は満足のいくものではありません:

  1. OpaqueTokenここのようなサードパーティプロバイダー側​​からエクスポートされたの使用(Angular 2 Router)
  2. クライアント側からすべてのプロバイダー manuallay を構成する

1 つ目は、サード パーティ プロバイダーからのみ実行できます。トークンをエクスポートし、そのトークンをファクトリ プロバイダーの独自の依存関係として要求します。

2 つ目は、サードパーティ ライブラリの実装の詳細やサービスを自分で把握して構成する必要があるため、非常に見苦しいものです。

angular 2 (クライアントおよびサードパーティプロバイダー側​​) で推奨されるパターンは何ですか?


アップデート 19.10.16

ソリューションの最初の提案を実装しましたが、うまくいきました。ただし、外部ライブラリを制御するか、変更についてプロジェクト所有者に同意するか、レポをフォークする必要があります。

サードパーティの lib.ts:

my-module.ts

しかし、外部ライブラリが構成を引数として渡す必要がある場合 (上の例のように)、myconfig をそれに挿入する方法はまだわかりません。

@Inject()コンストラクターまたはファクトリープロバイダーに加えて、Angular 2 に依存関係を注入する他の方法はありますか?

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

angular - 複数のディレクティブを介してサービスを提供する場合の優先規則は何ですか?

ディレクティブを追加して、コンポーネントの動作を変更できるようにしたいと考えています。

私のアプローチは、コンポーネントによって提供され、コンポーネントに提供されるサービスクラスで動作を定義することです。ディレクティブには独自のサービス プロバイダーがあるため、コンポーネントのプロバイダーをオーバーライドします。

これは機能しますが、同じトークンでサービスを提供する複数のディレクティブがある場合に何が起こるかについてのルールを見つけることができません:

私の観察では、ディレクティブからのプロバイダーは、コンポーネントからのプロバイダーよりも常に優先されるようです。ディレクティブの間では、「勝つ」のは常に宣言配列 (HTML ではなく) の最後のものです。

プランク: https://plnkr.co/edit/jdN9GaRTzoe7UQj2PIeP?p=preview

私の質問は、この種のプロバイダーのオーバーライドがサポートされているかどうか、そして少なくとも私の仮定に頼ることができれば、ディレクティブによって提供されるサービスは常にコンポーネントによって提供されるサービスよりも優先されるということです?

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

angular - サブコンポーネントの DI エラー

会社の内部ツールとして (本当に) 巨大な Angular 2 アプリケーションを開発しています。アプリケーションは、特定のユーザーのみがアクセスできるさまざまなサブアプリケーションで構成されています。

これを行うために、オブザーバブルを返す CanActivate クラスを使用して、サービスの 1 つにクエリを実行してアクセスを確認しようとしましたが、サービスをインポートしようとすると、クラスのコンストラクターが無効になります。

そこで、アプリケーション自体にテストを移動しましたが、同じように失敗しました。したがって、問題はサービス自体にある可能性があります。非常に奇妙なことは、apps コンテナがまったく問題なく同じサービスを使用していることです (このサービスは、利用可能なアプリケーションのリストを提供し、apps メニューを生成しています)。

問題はコンポーネントの読み込み順序にある​​と確信していますが (おそらくHttp関連しています)、どこを見ればよいかわかりません。悲しいことに、アプリケーションの複雑さを考えると、問題を特定するのは非常に難しく、何をすべきかわかりません。

似たような問題を探してみると似たような状況が見つかりましたが、その間に Angular2 の開発が進み、それらの解決策は役に立たなくなりました。

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

angular - Angular 2 依存性注入: すべてのパラメーターを解決できません (dep チェーンなし、バレルなし)

私は ng-book 2 の 1 つの例に従おうとしてきましたが、DI の章で問題が発生しました。

ここにプランカーがあります https://plnkr.co/edit/KSXE9tnRj4tffiISyp0i ReflectiveInjector を手動で作成すると完全に機能しますが、簡単な方法で NgModule のプロバイダーで宣言しようとすると失敗し、「すべてを解決できません」というエラーが表示されますAppComponent の依存関係」。他の回答を確認しましたが、ご覧のとおり、循環 deps やバレル関連の問題はありません。すべて 1 つのファイルにあります。ヒントをいただければ幸いです。