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, menggunakanprovidedIn
atribut baru . Ini menerima'root'
sebagai nilai atau modul aplikasi Anda. Saat Anda menggunakan'root'
, Andainjectable
akan terdaftar sebagai singleton dalam aplikasi, dan Anda tidak perlu menambahkannya ke penyedia modul root. Demikian pula, jika Anda menggunakanprovidedIn: UsersModule
,injectable
terdaftar sebagai penyediaUsersModule
tanpa menambahkannya keproviders
modul. "- 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 provide
layanan dalam modul apa pun selain modul root, maka Anda lebih baik menggunakan providers
array 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