Реальный одноэлементный сервис в Angular

Что такое метод Root?

Используя множество библиотек, мы часто видим что-то вроде LibraryModule.forRoot(), когда импортируем библиотечный модуль в основной модуль (в основном AppModule). Почему и как мы можем реализовать это внутри наших проектов?

Сервисы являются синглтонами

Внутри модуля есть только один экземпляр сервиса. Благодаря тому, что во всех компонентах, которые используют данный сервис, мы имеем одни и те же данные. Да! Но только если мы не используем наш сервис внутри нескольких функциональных модулей.

Если мы начинаем использовать сервис внутри нескольких функциональных модулей, кажется, что сервис создается много раз. Это то, чего мы не хотим (иногда).

Например, возьмем ngrx/store. Мы используем метод forRoot для импорта этой библиотеки в наш AppModule, потому что мы хотим иметь одинаковые данные во всех модулях.

Выполнение

Создание метода forRoot тривиально.

Мы можем использовать это в нашей собственной реализации магазина или других сервисов, которые должны использовать одни и те же данные во всех модулях. Не забудьте использовать метод forRoot внутри основного модуля (в основном AppModule).

Теперь у нас должен быть настоящий одноэлементный сервис.