Під час генерації сервісів у Angular CLI він додає додаткові метадані з властивістю "наданий в" із замовчуванням "root" для декоратора ін'єкцій.
@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/isissue/10170