1

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

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

任何建议表示赞赏,

谢谢,

4

3 回答 3

2

不,这根本不是矫枉过正,而且似乎是一个完美的惯用解决方案。

Angular2 服务(通常)是单例的。

我的理解是,如果您:

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

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

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

这是关于这种行为的内容丰富且有趣的文章:https ://blog.budacode.com/2016/06/02/angular-2-services/

于 2016-10-24T18:11:57.777 回答
2

如果数组由 更新ServiceAComponentA使用omponentB/读取更新的数组serviceA only,您必须仅使用服务,singleton以便使用/共享。ComponentAComponentBsingle instanceServiceA

因此,由于单实例, componentAto所做的任何更新SeviceA也将可用。ComponentB

于 2016-10-24T18:14:35.373 回答
1

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

于 2016-10-24T18:15:57.823 回答