想象以下情况。组件A更新服务A中的数组A。组件B使用/读取服务A中的阵列A。如果我想通知组件B…当组件A更新数组时,我可以使用单例,但我的感觉……(来自c# + MVVM背景)单例服务将是多余的,因为它只被应用程序中的那两个组件使用。
是否有其他选择,或者我应该直接创建一个单例服务?
任何建议都很感谢,
谢谢你,
不,这一点也不过分,而且似乎是一个完美的惯用解决方案。
Angular2的服务(通常)是单例的。
我的理解是如果你:
- 用
@Injectable
装饰您的服务 - 将你的服务添加到@NgModule中的
providers[]
, -
import
您的服务到您的组件
你应该共享同一个Service的单个实例。
如果你愿意,你可以将服务声明为组件的提供者,方法是将它包含在@Component
装饰器的provider[]
列表中,这将为该组件实例化一个新的服务实例。如果您希望在不共享状态的情况下提供功能,这将非常有用。
这里有一篇关于这种行为的有趣的文章:https://blog.budacode.com/2016/06/02/angular-2-services/
如果数组在 ServiceA
中被 ComponentA
和 omponentB
从 serviceA only
中使用/读取更新后的数组,则必须只使用 singleton
服务,以便 ComponentA
和 ComponentB
将使用/共享 ServiceA
的 single instance
。
因此,由于单个实例, componentA
对 SeviceA
的任何更新也将在 ComponentB
中可用。
使用服务将是Angular解决这个问题的"标准"方法,正如msanford指出的那样,这完全没问题。由于ng2非常灵活,您还可以采用其他方法,例如使用redux实现(如https://github.com/ngrx/store)。