2017-07-29 4 views
0

私はtypescript、角2、そして私の周りに私の心を得ることができない1つの質問に新しいです。私が考えているのは、多くのコンポーネントにとって有用で共通の機能を持つファイルです。したがって、最終的にそれらの機能を中心にして、これらすべてのコンポーネントで使用します。角度サービスの注入とオブジェクトの読み込みとの違い

私の質問は、機能を持つオブジェクトリテラルを作成してコンポーネント内にインポートできるときに、これらのサービスを注入する必要があることです。インポートしたオブジェクトを使用してこれらの機能を呼び出すことはできます。

+2

サービスはシングルトンであり、オブジェクトはそうではありません。あるコンポーネントがサービスのプロパティの値を変更した場合、他のコンポーネントはその値が変更されたことを見ることができますが、コンポーネントがインポートしたオブジェクトのプロパティの値を変更した場合、 – Claies

+1

Injectorでは、テストを含め、定義され使用されているファイルを変更することなく、サービスインスタンスを再インスタンス化、置換、または変更することができます。これは、少なくともハッキングなしでは、インポートでは不可能です。これはDIコンテナの特性であり、Angularに固有のものではありません。 – estus

+0

ありがとうございます、私はすべての答えが物事をより明確にすると思う:) – Jdsans

答えて

1

クラスタイプを拒否して使用するだけで、完全に有効です。しかし、角度での依存性注入のメカニズムは、あなたが同じことを達成することができますが、いくつかの追加の利点を持つ:

  • インスタンスが宣言されている 場所に応じてスコープすることができシングルトンことができます(アプリ、モジュール、コンポーネント)
  • @Injectコンストラクタパラメータに基本クラスまたはインタフェースを(注入トークン経由で)宣言し、モジュールに注入するクラスをコンフィグレーションすることができます。
  • 角度インジェクタには、どのようにクラスインスタンスは組み立てられ、インジェクタによって配送されます
  • あなたはcです実行時よりもテストのための異なるクラスを注入することで、模擬テストサービスが非常に簡単になります。
-1

コメントが何を言っているかを述べると、サービスの単一のインスタンスは、複数のコンポーネント/クラスにわたって使用されることを意図しています。これは依存性注入で行われます。たとえば、複数のコンポーネントによって使用されたサービスにToDoアイテムの配列がある場合、このリストはすべてのコンポーネントで同じになるため、あるコンポーネントをリストに追加すると、他のコンポーネントすべてにこの変更が反映されます。

一方、オブジェクトリテラルをインポートすると、コンポーネントごとに異なるインスタンスが使用されます。したがって、同じ例では、サービスオブジェクトにTo-Doアイテムの配列がある場合、このオブジェクトをインポートした各コンポーネントには、互いに関係のないTo-Doアイテムの個別のリストがあります。

この問題を明確に説明してください。

+1

私は最初の段落であなたの声明に同意します。それはあなたがサービスを注入する方法によって異なります。あなたは、同じインスタンスである共有サービスのケースを明記します。しかし多くの場合、配列を共有することができるので、配列は共有されます – Vega

+0

モジュールとクラス+ DIトークンを使用してアプリケーションの構成と関係がありますが、どちらも状態を簡単に共有する機能を備えています。 –

関連する問題