2017-07-18 1 views
0

私は過去2ヶ月間に角2を学んでいましたが、私はサービスの使用を少し混乱させています。私がいくつかのコンポーネントを持つアプリケーションを開発していて、それぞれがWebサービスから表示する一連のデータを持っている場合、それらが同じモデル上に構築されている場合、単一のサービスを使ってデータを表示できますか?成分?そのことに角2サービス:正しいユースケース

+2

はい、すべてのコンポーネントに対して1つのサービスを使用できます。 – Brandon

+0

あなたはそのトピックについての例がありますか?私はそれを昨日の質問に投稿しています。誰もそれがどのように動作するかはわかりません。 – Geeksan

+0

angular.ioの "Tour of Heroes"を経験しましたか?コンポーネント内の単一サービスのデータを使用する方法の例を示します。ここでデモンストレーションされたコンセプトを拡張して、何かをすることができます。 – Brandon

答えて

1

多くのコンポーネントでサービスを使用でき、すべてのコンポーネントに固有のサービスを作成する必要はありません。 angular2 referenceことで

代わりのコピーと何度も同じコードを貼り付ける、あなたは、単一の再利用可能なデータサービスを作成し、それを必要とする コンポーネントに注入 ます。

また、サービスはシングルトンであり、コンポーネント内のすべてのインスタンスは同じです(階層型インジェクタに基づいています)。

+0

「サービスはシングルトンです」は厳密には真実ではありません。ステートフルサービスとステートレスサービスのどちらを使用しているかによって異なります。私の答えを見てください。それ以外の場合は、自分自身を繰り返さないことについての部分がこのスレッドの有効な追加であるため、私はあなたの答えに同意します。 – JGFMK

2

サービスクラス(プロバイダ)が私を啓発するために、事前に

おかげで@Injectableで装飾され、ことができます:あなたがアプリ-module.tsでそれらを定義

  • シングルトン@ngModuleはプロバイダの中で:@]単一のサービスがしないユースケースのために、@Componentデコレータに配列
  • が挿入されています。

あなたのサービスの状態が含まれている場合は、シングルトンは、潜在的副作用を引き起こすとドキュメントがここに誤解されている

@Componentの内側にあなたがそれらを配置したいときです。..メタデータプロパティまでスクロール:「プロバイダを参照してください。 '

たとえば、Observablesを常に返すことで、ステートレスサービスを使用することができます。

つまり、HTMLテンプレートの背後にあるコンポーネントのTypescriptで呼び出されたサービスに登録します。

  • コンポーネントクラスは、
  • HTMLテンプレートがaysnc pipeと併せて観察クラスのプロパティを使用して観察可能な特性を有しています。 |非同期
関連する問題