Реальный одноэлементный сервис в Angular
Что такое метод Root?
Используя множество библиотек, мы часто видим что-то вроде LibraryModule.forRoot()
, когда импортируем библиотечный модуль в основной модуль (в основном AppModule
). Почему и как мы можем реализовать это внутри наших проектов?
Сервисы являются синглтонами
Внутри модуля есть только один экземпляр сервиса. Благодаря тому, что во всех компонентах, которые используют данный сервис, мы имеем одни и те же данные. Да! Но только если мы не используем наш сервис внутри нескольких функциональных модулей.
Если мы начинаем использовать сервис внутри нескольких функциональных модулей, кажется, что сервис создается много раз. Это то, чего мы не хотим (иногда).
Например, возьмем ngrx/store
. Мы используем метод forRoot
для импорта этой библиотеки в наш AppModule
, потому что мы хотим иметь одинаковые данные во всех модулях.
Выполнение
Создание метода forRoot
тривиально.
Мы можем использовать это в нашей собственной реализации магазина или других сервисов, которые должны использовать одни и те же данные во всех модулях. Не забудьте использовать метод forRoot
внутри основного модуля (в основном AppModule
).
Теперь у нас должен быть настоящий одноэлементный сервис.