【问题标题】:Subscribing to a static data change Angular 2 TypeScript订阅静态数据更改Angular 2 TypeScript
【发布时间】:2018-03-07 23:23:22
【问题描述】:

我有一个从不同位置更新的对象。我想订阅它。 问题是 - 没有生成项目。

我是这样订阅的:

我试图让订阅者知道我的对象 (AppData.SelectedUser.assets) 上的数据何时发生变化。有什么建议吗?

非常感谢您对这种方式的帮助(对 Angular 来说有点新)。

【问题讨论】:

  • "没有生成项目。" - 你是什么意思?这个订阅块正在运行吗?你试过调试吗?
  • 您是在问如何设置它,以便在对象更改时订阅它以便知道新值?
  • @DanielWSrimpel 完全正确!!根据您的评论更新了我的问题

标签: angular typescript observable angular2-services


【解决方案1】:

您需要使用某种Subject 来保留该值并将新值推送到它上面。具体来说,您可能需要使用BehaviorSubject

看起来属性assets 和方法getAssets 在同一个类中。您将希望在该类中有一个新的私有变量Subject,以便随着时间的变化保留资产(每当对资产进行更改时,您都会在您的主题上推送另一个值)。然后,您可以在 getAssets 方法中简单地将您的主题作为可观察对象返回。

在 StackOverflow 上和整个 Google 上都有大量这样做的示例。一个这样的例子可以在at this blog找到。

【讨论】:

  • 所以 observable 不起作用的原因是因为我不断更改我的 Assets 数组,而不仅仅是添加/减去它?
  • 是的,如果您直接对对象(在本例中为数组)进行更改,它们将在整个应用程序中传播。在大多数情况下,在幕后修改原始对象并不理想,因为一些使用这些属性(在本例中为项目)的代码不会知道它已被更改,也不会触发需要运行的代码。
  • 如果您不想在更改发生时广播更改,那么在这种情况下确实没有理由使用 observable。
  • 但是,我真正想要实现的是在等待加载 http.get 调用的同时加载静态数据(这可能需要 0.5-10 秒,或者永远不会)。
  • 既然如此,那就去看看那篇博文
猜你喜欢
  • 1970-01-01
  • 2017-10-18
  • 2019-06-05
  • 1970-01-01
  • 2016-10-09
  • 2016-07-20
  • 2017-04-17
  • 1970-01-01
  • 2021-06-09
相关资源
最近更新 更多