Angular 6 でサービスを生成するときに、Injectable デコレータで providedIn を使用する目的は何ですか? 質問する

Angular 6 でサービスを生成するときに、Injectable デコレータで providedIn を使用する目的は何ですか? 質問する

Angular CLI でサービスを生成する場合、Injectable デコレータのデフォルトが 'root' である 'provided in' プロパティを使用して追加のメタデータが追加されます。

@Injectable({
  providedIn: 'root',
})

providedIn は具体的に何をするのでしょうか? これは、アプリケーション全体に対して「グローバル」タイプのシングルトン サービスのようにサービスを利用できるようにするものだと想定していますが、そのようなサービスを AppModule のプロバイダー配列で宣言する方がきれいではないでしょうか?

ベストアンサー1

providedIn: 'root'Angular 6 以降、サービスを提供する最も簡単で効率的な方法です。

  1. このサービスは、モジュールのプロバイダー配列に追加する必要なく、シングルトンとしてアプリケーション全体で利用できるようになります (Angular <= 5 など)。
  2. サービスが遅延ロードされたモジュール内でのみ使用される場合、そのモジュールとともに遅延ロードされます。
  3. 一度も使用されない場合は、ビルドには含まれません (ツリーがシェイクされます)。

さらに詳しい情報については、ドキュメントNgModule FAQを参照してください。

ちなみに:

  1. アプリケーション全体のシングルトンが必要ない場合は、代わりにプロバイダーのコンポーネントの配列を使用します。
  2. 特定のモジュールの外部で他の開発者がサービスを使用しないようにスコープを制限する場合は、providers代わりに NgModule の配列を使用します。

おすすめ記事