web-dev-qa-db-ja.com

Angularサービスデコレータが提供されています遅延ロードに対するルート効果

新しいangularサービスデコレータ

@Injectable({
    providedIn: 'root'
})

遅延読み込みと連動して機能します。ルートで提供されるサービスを使用して遅延ロードされたモジュールがある場合、つまり、アプリケーションの基本コードに特定のサービスが含まれます。アプリルートのchunks.jsを使用するか、サービスをレイジーロードし、後でそのモジュールをレイジーロードするときにグローバルシングルトンにします。

ProvidedInに関する情報

https://angular.io/guide/ngmodule-faq

25

はい、この場合は、遅延ロードされたモジュール/チャンクの一部のみになります。 providedIn: 'root'を使用する場合、Angularコンパイラーは最適な方法を自動的に判断します。

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

詳細については、 documentation および NgModule FAQs をお読みください。

ところで:

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