在Angular 2中使用服务单例作为数据源的示例

时间:2016-02-29 12:23:33

标签: service singleton angular observable

我需要一个使用服务单例作为我的Angular 2应用程序的数据源的好例子。

情景如下:

我有一个应用程序正在加载本地数据库(在我的例子中是MongoDB)中的一些项目的价格。 一些组件需要使用服务,这将是整个应用程序中项目价格的普遍真实来源。这些价格可以在外部采取行动:用户可以更改货币,因此必须重新计算货币,或者可以更改计算价格平均值的日期范围。

所以我需要一个单独的服务,它将在app初始化时加载,组件只有在服务数据存储已经用价格初始化后才需要加载价格。此外,当货币或日期范围发生变化时,组件需要刷新数据(我猜使用Observable模式)。也许最好的方法是在app组件中注入服务,以便首先初始化它?

这种应用程序是否有配方或建议的架构?

我无法使用ngOnInit()从每个组件调用一些init函数,因为我希望在多个组件中提供数据。我需要知道每个组件何时使用Service的数据存储中的数据对其进行初始化。我需要知道数据何时准备就绪。

我在Angular 1.x中实现的方法是实例化服务,并在构造函数中初始化数据,然后在初始化数据时,发出$rootScope事件以告知所有组件数据已准备就绪。

我无法在Angular 2中找到适当的配方来做同样的事情。

1 个答案:

答案 0 :(得分:2)

您需要创建服务并在引导应用程序时定义它:

bootstrap(App, [ SingletonService ]);

这样,您将拥有整个应用程序的单个实例。

如果要初始化事物,可以使用它构造函数。要通知使用该服务的其他元素,您可以使用EventEmitter的一个或多个属性。这样,当数据存在或发生变化时,您将能够发出事件。组件可以在这些EventEmitters上订阅以通知......