Ketika menghasilkan layanan di CLI Angular, itu menambahkan metadata tambahan dengan properti 'disediakan' dengan default 'root' untuk dekorator injeksi.
@Injectable({
providedIn: 'root',
})
Apa sebenarnya yang disediakan di lakukan? Saya berasumsi ini membuat layanan tersedia seperti layanan singleton tipe 'global' untuk seluruh aplikasi, namun, tidak akan lebih bersih untuk mendeklarasikan layanan seperti itu dalam array penyedia AppModule?
MEMPERBARUI:
Untuk orang lain, paragraf berikut memberikan penjelasan yang baik tentang itu juga, khususnya jika Anda ingin memberikan layanan Anda hanya ke modul fitur.
Sekarang ada cara baru, yang disarankan, untuk mendaftarkan penyedia, langsung di dalam
@Injectable()dekorator, menggunakanprovidedInatribut baru . Ini menerima'root'sebagai nilai atau modul aplikasi Anda. Saat Anda menggunakan'root', Andainjectableakan terdaftar sebagai singleton dalam aplikasi, dan Anda tidak perlu menambahkannya ke penyedia modul root. Demikian pula, jika Anda menggunakanprovidedIn: UsersModule,injectableterdaftar sebagai penyediaUsersModuletanpa menambahkannya keprovidersmodul. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
PEMBARUAN 2:
Setelah penyelidikan lebih lanjut, saya memutuskan hanya berguna untuk memilikinya providedIn: 'root'
Jika Anda ingin providelayanan dalam modul apa pun selain modul root, maka Anda lebih baik menggunakan providersarray di dekorator modul fitur, jika tidak, Anda akan terganggu dengan dependensi melingkar. Diskusi menarik bisa didapat di sini - https://github.com/angular/angular-cli/issues/10170