4

我正在努力围绕可观察对象/观察者/主题和角度来思考。我浏览了许多涵盖可观察基础知识的教程,并且基本订阅方案很有意义。然而,这些教程似乎并未涵盖添加到可观察集合中。他们中的大多数似乎也专注于使用 HttpClient,而我试图在不依赖 Web 服务的情况下模拟一些数据 - 只是用于测试的基本内存中对象数组。

我创建了一个简单的应用程序来展示我的困惑。

组件 1 和服务 1 展示了获取数字集合和添加新数字的基本不可观察方式。组件 2 和服务 2 展示了一种可观察到的获取数据并由于订阅而自动获取更新的方式。我正在使用主题来做到这一点。

https://github.com/rpaschnikov/observable-test-app

谁能指出我是否走在正确的道路上,还是我完全误解了可观察到的模式?我需要在这里使用主题还是应该能够坚持使用 Observables?如果是这样 - 我如何从中提出 next() 通知?最重要的是,有没有人知道为什么第一个this.subject.next()不触发更新,而进一步调用呢?

谢谢大佬!!

4

1 回答 1

4

使用 Observables 的概念很容易被误解,因为有很多东西要同时查看!!!

但是,您不必惊慌,因为它们并没有您想象的那么糟糕。

您正在使用一种特殊类型的 Observable ,它既是 anObserver又是 an Observable,例如multicasting.

Observer:当您想通过以下方式更新可观察流时,您使用我next

Observable:当您想通过以下方式从可观察流中获取值时,您可以使用我subscribe

Ben Lesh 发表主题演讲

在您的情况下(您的 github 上的 Service 2),您使用的是Subject. 这意味着如果我没有观察者(有人订阅了我),在我的流通过next那个人更新之前将不会获得价值。

您可以尝试使用BehaviorSubject. 主要区别在哪

  1. 我必须有一个初始值
  2. 每当有人订阅我时,无论是在我更新之前还是之后,他们总是会获得最新的价值。

试试看!

希望这可以帮助

于 2018-08-10T12:16:00.833 回答