Angular2 альтернативный вариант
Представьте себе следующую ситуацию. Компонент A обновляет массив A в Сервисе A. Компонент B использует / читает массив A в Сервисе A. Если я хочу, чтобы Компонент B был уведомлен... когда компонент A обновляет Массив, я мог бы использовать одиночный, но мое чувство...(исходя из фона C# + MVVM) одноэлементная служба была бы излишней, поскольку она используется только этими двумя компонентами в приложении.
Есть ли альтернатива, или я должен просто пойти и создать единый сервис?
Любой совет ценится,
Спасибо,
3 ответа
Нет, это совсем не излишне, и кажется совершенно идеологическим решением.
Службы Angular2 (часто) являются синглетонами.
Насколько я понимаю, если вы:
- Украсьте свой сервис с
@Injectable
- Добавьте ваш сервис в
providers[]
в @NgModule, import
ваш сервис в ваши компоненты
Вы должны использовать один и тот же экземпляр этого Сервиса.
При желании вы можете объявить Сервис как поставщик для компонента, включив его в @Component
отделочника provider[]
список, который будет создавать новый экземпляр Сервиса для компонента. Это полезно, если вы хотите предоставить функциональность без общего состояния.
Вот информативная и веселая статья об этом поведении: https://blog.budacode.com/2016/06/02/angular-2-services/
Если массив обновляется в ServiceA
от ComponentA
а также omponentB
использует / читает этот обновленный массив из serviceA only
, вы должны использовать singleton
сервис только для того, чтобы ComponentA
а также ComponentB
будет использовать / поделиться single instance
из ServiceA
,
Так что любое обновление сделано componentA
в SeviceA
также будет доступен в ComponentB
из-за одного экземпляра.
Переход с Сервисом был бы "стандартным" угловым подходом к этому, и, как указал мсанфорд, это совершенно нормально. Поскольку ng2 достаточно гибок, вы также можете использовать другие способы, например, использовать реализацию с избыточностью (например, https://github.com/ngrx/store).