1. ホーム
  2. angular

[解決済み】Angular 6でサービスを生成する際に、InjectableデコレータでprovidedInの目的は何ですか?

2022-04-11 18:27:42

質問

Angular CLIでサービスを生成する際、Injectableデコレータのデフォルトが「root」の「provided in」プロパティで余分なメタデータを追加しています。

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

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

解決方法は?

providedIn を使用すると、モジュールのプロバイダに追加することなく、インジェクタブルをモジュールのプロバイダとして登録することができます。

から Docs

サービス自体はCLIが生成したクラスで、それが でデコレートされています。デフォルトでは、このデコレータは にはprovidedInプロパティがあり、サービスのプロバイダを作成します。 この場合、providedIn: 'root'は、サービスのプロバイダを作成します。 インジェクタで提供されます。