为了账号安全,请及时绑定邮箱和手机立即绑定

行为主体对可观察的?

行为主体对可观察的?

泛舟湖上清波郎朗 2019-06-25 16:02:48
行为主体对可观察的?我正在研究RxJ的角度模式,我不明白BehaviorSubject和一个Observable.据我理解,BehaviorSubject是一个可以随时间变化的值(可以订阅,订阅者可以接收更新的结果)。这似乎是一个完全相同的目的Observable.你什么时候会用Observablevs.aBehaviorSubject?使用BehaviorSubject超过一个Observable反之亦然?
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

行为主体主题是一种类型的主题,主题是一种特殊的可观察类型,因此您可以订阅消息,就像其他任何可观察到的一样。行为主体的独特特点是:

  • 它需要一个初始值,因为它必须始终在订阅时返回一个值,即使它没有收到

    next()

  • 订阅时,它返回主题的最后一个值。可观察到的常规触发器只在接收到

    onnext

  • 在任何时候,您都可以使用

    getValue()

    方法。

与可观察的学科相比,一个学科的独特特点是:

  • 它是一个观察者,除了是一个可观察的,所以你也可以发送值给一个主题,除了订阅它。

此外,您还可以使用asObservable()方法上BehaviorSubject.

可观察是一个通用的,而且BehaviorSubject在技术上是可观察的子类型,因为BehaviorSubject是一个具有特定特性的可观察对象。

例举行为主体:

// Behavior Subject// a is an initial value. if there is a subscription // after this, it would get "a" value immediatelylet bSubject = new BehaviorSubject("a"); bSubject.next("b");bSubject.subscribe(value => {
  console.log("Subscription got", value); // Subscription got b, 
                                          // ^ This would not happen 
                                          // for a generic observable 
                                          // or generic subject by default});bSubject.next("c"); // Subscription got cbSubject.next("d"); // Subscription got d

示例2与常规主题:

// Regular Subjectlet subject = new Subject(); subject.next("b");subject.subscribe(value => {
  console.log("Subscription got", value); // Subscription wont get 
                                          // anything at this point});subject.next("c"); // Subscription got csubject.next("d"); // Subscription got d

可以从这两个方面创建一个可观察的SubjectBehaviorSubject使用subject.asObservable().

唯一的区别是,您不能将值发送到可观察的next()方法。

在角度服务中,我会用BehaviorSubject对于作为角服务的数据服务,通常在组件和行为主题之前进行初始化,以确保使用该服务的组件接收到最后更新的数据,即使由于组件对该数据的订阅而没有新的更新。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信