angular2单例替代

angular2 singleton alternative

想象一下下面的情况。 组件 A 更新服务 A 中的数组 A。 组件 B uses/reads 服务 A 中的数组 A。 如果我想让组件 B 得到通知......当组件 A 更新数组时,我可以使用单例,但我的感觉......(来自 C# + MVVM 背景)单例服务会矫枉过正,因为这只是由应用程序中的这 2 个组件使用。

是否有替代方案,或者我应该继续创建单例服务?

如有任何建议,我们将不胜感激,

谢谢,

不,它一点也不矫枉过正,而且看起来是一个完美的惯用解决方案。

Angular2 服务(通常)是单例。

据我了解,如果您:

  • @Injectable
  • 装饰您的服务
  • 将您的服务添加到 providers[] in @NgModule,
  • import 您的服务到您的组件

您应该共享该服务的同一个实例。

如果您愿意,您可以通过将服务包含在 @Component 装饰器的 provider[] 列表中,将服务声明为组件的 提供者 ,这将为组件实例化服务的 新实例。如果您希望在不共享状态的情况下提供功能,这将很有用。

这是一篇关于此行为的信息丰富且愉快的文章:https://blog.budacode.com/2016/06/02/angular-2-services/

如果数组在 ServiceA 中由 ComponentAomponentB uses/reads 从 serviceA only 更新的数组,你必须使用 singleton 服务,以便 ComponentAComponentB 将 use/share single instance ServiceA

因此 componentASeviceA 所做的任何更新也将可用在 ComponentB 因为单个实例。

使用服务将是 "standard" Angular 的方法,正如 msanford 指出的那样,这完全没问题。 由于 ng2 非常灵活,您还可以采用其他方式,例如使用 redux 实现(例如 https://github.com/ngrx/store)。