【问题标题】:Example of using a service singleton as data source in Angular 2在 Angular 2 中使用服务单例作为数据源的示例
【发布时间】:2016-02-29 12:23:33
【问题描述】:

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

场景如下:

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

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

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

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

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

我在 Angular 2 中找不到合适的方法来做同样的事情。

【问题讨论】:

    标签: service singleton angular observable


    【解决方案1】:

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

    bootstrap(App, [ SingletonService ]);
    

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

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

    【讨论】:

    • 这是我想到的场景。您是否有此类情况的文章或示例的链接?谢谢。
    • 我认为这个问题可能会让你感兴趣:stackoverflow.com/questions/34376854/…
    • 我终于可以使用您上面链接的示例来实施解决方案。它有效。也许您应该将链接合并到您的主要答案中,因为我已经将其标记为正确。谢谢。
    猜你喜欢
    • 2021-04-28
    • 2016-07-11
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2018-08-07
    • 2017-02-14
    相关资源
    最近更新 更多