【发布时间】:2018-08-10 11:44:06
【问题描述】:
我正在努力将我的头包裹在可观察对象/观察者/主题和角度上。我浏览了许多涵盖可观察基础知识的教程,并且基本订阅方案很有意义。然而,这些教程似乎没有涵盖 添加 到可观察的集合。他们中的大多数似乎也专注于使用 HttpClient,而我试图在不依赖 Web 服务的情况下模拟一些数据 - 只是用于测试的基本内存中对象数组。
我创建了一个简单的应用程序来展示我的困惑。
组件 1 和服务 1 展示了一种获取数字集合和添加新数字的基本不可观察方式。组件 2 和服务 2 展示了一种可观察到的获取数据并由于订阅而自动获取更新的方式。我正在使用主题来做到这一点。
https://github.com/rpasechnikov/observable-test-app
有人能指出我是否走在正确的道路上,还是我完全误解了可观察到的模式?我需要在这里使用主题还是应该能够坚持使用 Observables?如果是这样 - 我如何从中提出 next() 通知?最重要的是,有没有人知道为什么第一个 this.subject.next() 不会触发更新,而进一步的调用会触发更新?
谢谢大家!!
【问题讨论】:
-
this.subject.next()不会触发事件,因为它在订阅之前运行并且主题不会返回第一个值。考虑使用BehaviorSubject来解决这个问题。关于添加,您将添加到数组中并推送另一个数组。如果您想在订阅中看到更改,请考虑推送更改。 -
当您希望部分代码对事件做出反应时,通常会使用 observable。查看您的代码,您应该有一个服务、一个消息/事件发送器和一个消息/事件接收器。我认识服务和发送者,但不认识接收者。我发现以下关于如何使用主题非常清楚:jasonwatmore.com/post/2018/06/25/…
-
非常感谢您的建议!我已经使用 BehaviorSubject 更新了示例代码,现在一切似乎都运行良好。关于 next() 现在不触发是有道理的。也感谢文章链接 - 现在阅读:) 我可以问一下我什么时候会使用普通的 observable 吗?它总是让我感到困惑,示例如何从 HttpClient GET 创建 observable。如果 HttpClient GET 不再被调用,任何新项目将如何进入 Observable?这是否只是表明这是一个起点,我们可以在计时器上轮询 HttpClient GET 并通知客户端任何新值?
标签: angular rxjs observable subject-observer