何时使用Subject,BehaviorSubject和真实示例

时间:2019-03-29 07:00:25

标签: angular

我正在研究Angular,目前我的话题是Observables。我现在了解什么是可观察对象,包括主题,BehaviorSubject,ReplaySubject。 但是我需要一个实际的示例,在这些示例中可以实际实现这些示例,因此可以理解何时使用哪种方法。

例如,在我可以看到/比较上述方法的实现的任何应用程序中。

3 个答案:

答案 0 :(得分:1)

要从流中获取初始(默认)值时,请使用BehaviorSubject代替Subject

假设您要检查用户是否登录:


Subject

isLoggedIn$ = new Subject<boolean>();

.........

isLoggedIn$.subscribe(res => console.log(res))

subscribe 不会触发,直到调用isLoggedIn$.next(someValue)为止。


但使用BehaviorSubject

isLoggedIn$ = new BehaviorSubject<boolean>(false); // <---- You give 'false' as an initial value

.........

isLoggedIn$.subscribe(res => console.log(res))

subscribe 将立即触发,因为它拥有false作为流中的值。


因此,如果要使用初始(默认)值,则需要使用BehaviorSubject

https://medium.com/@luukgruijs/understanding-rxjs-behaviorsubject-replaysubject-and-asyncsubject-8cc061f1cfc0

What is the difference between Subject and BehaviorSubject?

答案 1 :(得分:0)

我使用行为主题在父级和子级组件之间以及同级组件之间发送消息。

这是行为主题的示例,可能会帮助您 https://stackblitz.com/edit/behavior-subject-2019

答案 2 :(得分:0)

这是一个实际例子,几乎没有解释。假设您的应用程序中有许多components,例如:购物车,您有一个导航栏,显示添加到购物车中的商品。您有产品页面,有许多添加到购物车按钮的项目网格。产品详细信息页面,您可以在其中找到该产品的“添加到购物车”按钮。最后是订单摘要页面(即购物车页面,在该页面上,您可以针对列表中的每个产品添加按钮,以添加+或删除-。 在上述情况下,您可以在cartService上使用SubjectsBehaviorSubject。以及通过服务依赖项注入来预订的所有其他组件。添加到购物车按钮将调用服务的next()功能。 如果您希望在用户仅通过选择购物车中的项目但未完成交易过程而离开会话时从浏览器本地存储(或其他机制)中预先填充购物车。您可以使用BehaviorSubject进行初始加载到购物车。

要扩展@Harun Yilmaz的内容,必须从单页应用程序的不同部分检查用户登录状态,在这种情况下,您可以相应地使用它来检查用户的登录状态是否仍然有效。

不要与Web流和消息流混淆。消息流与事件流结合使用。请不要误会。例如:网络流媒体就是您的位置,例如:套接字,您首先要建立连接,然后再像流媒体一样交换数据包。

在角度上,它的工作原理也与您通过订阅asObservable()建立连接类似。像消息流一样交换数据。 BehaviorSubject向您发送欢迎消息,而主题直到next()被调用之前才发送任何消息

您去一家餐馆,服务员主动打招呼BehaviorSubject,服务员打招呼Subject时打招呼(我能为您提供帮助)您在地板上的所有服务员都在提供服务subscribed由餐厅老板提供。

希望这有助于了解