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).

Другие вопросы по тегам