Angular CLIでサービスを生成する場合、Injectableデコレーターのデフォルトの「root」を使用して、「provided in」プロパティーで追加のメタデータを追加します。
@Injectable({
providedIn: 'root',
})
正確には提供されますか?これにより、サービスがアプリケーション全体で「グローバル」タイプのシングルトンサービスのように利用可能になると想定していますが、AppModuleのプロバイダー配列でそのようなサービスを宣言する方がきれいではありませんか?
更新:
他の誰にとっても、特に機能モジュールのみにサービスを提供したい場合は、次の段落でそれについて別の良い説明が提供されました。
@Injectable()
新しいprovidedIn
属性を使用して、デコレーター内でプロバイダーを直接登録するための新しい推奨される方法があります。'root'
アプリケーションの値または任意のモジュールとして受け入れます。を使用'root'
するinjectable
と、アプリケーションでシングルトンとして登録され、ルートモジュールのプロバイダーに追加する必要はありません。あなたが使用している場合は同様に、providedIn: UsersModule
、injectable
のプロバイダとして登録されているUsersModule
にそれを追加することなく、providers
モジュールの「 - 。 https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
更新2:
さらに調査した後、 providedIn: 'root'
provide
ルートモジュール以外のモジュールでサービスを利用したい場合providers
は、機能モジュールのデコレーターで配列を使用することをお勧めします。そうしないと、循環依存関係に悩まされることになります。ここで行われる興味深い議論-https://github.com/angular/angular-cli/issues/10170