Observable, Subject & BehaviorSubject
可观察对象和主题之间的区别
如果您所关心的只是数据检索,那么 DeborahK 的回答非常正确。通常,我轻描淡写地说“通常”,HTTP 请求是一个标准的 observable,这意味着请求发出、返回、返回一些数据,并且在对其进行新订阅之前不会再次被触发。对于大多数可观察到的模式,标准Observable
类型非常适合这项工作。
考虑它的最简单方法是只看名字;可观察的。如果您所做的只是“获取”数据,那么 anObservable
就是您想要的。但是,如果您发现在实例化后需要操作数据流,那么 a Subject
orBehaviorSubject
可能是合适的选择。Subject
和之间的区别在于BehaviorSubject
aSubject
必须有一个初始值,其中 aBehaviorSubject
在实例化时被赋予一个初始值。
Subject
or的用例的一个很好的例子BehaviorSubject
是一个布尔值,用于在整个站点中告诉应用程序何时应该显示模态框。由于多个组件可以更改 Modal 的可见性状态,因此您需要一个BehaviorSubject
可以更改的组件,从而触发父组件显示模态。
另一个很好的例子Subject
是一个搜索栏,它向整个应用程序的其他组件宣传它的内容。这里的关键是您正在向流中发送新值,以供应用程序中的其他组件/服务观察。
我要说的最后一件事是,从Observable
技术上讲,以上所有内容都属于 a 的范畴。我认为这就是很多混乱发生的地方。
推送数据
关于您的问题,我注意到的另一件事是,您似乎实际上是在尝试解决 Angular 本身不一定可以解决的问题。如果您的“后端”中有非常动态的数据要推送到前端,那么您可能需要查看 websocket 套接字服务器。这听起来比实际复杂得多,但本质上它允许您的服务器将数据“推送”到您的应用程序。如果它是安全数据,我建议使用您的服务器推送“可用更新”消息,然后让应用程序安全地为更新数据发出 HTTP 请求。不要通过 Web 套接字发送安全信息。这是在节点服务器中使用 Socket IO 并推送到 Angular 应用程序的 websockets的一个很好的资源。那里'