Angular2 中使用服务单例作为数据源的示例

Example of using a service singleton as data source in Angular 2

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

场景如下:

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

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

是否有针对此类应用程序的配方或建议的架构?

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

我在Angular1.x中的做法是实例化服务,在构造函数中初始化数据,然后在数据初始化时,发出一个$rootScope事件给告诉所有组件数据已准备就绪。

我在 Angular 2.

中找不到做同样事情的合适方法

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

bootstrap(App, [ SingletonService ]);

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

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