行为主体对可观察的?

行为主体对可观察的?

我正在研究RxJ的角度模式,我不明白BehaviorSubject和一个Observable.

据我理解,BehaviorSubject是一个可以随时间变化的值(可以订阅,订阅者可以接收更新的结果)。这似乎是一个完全相同的目的Observable.

你什么时候会用Observablevs.aBehaviorSubject?使用BehaviorSubject超过一个Observable反之亦然?


泛舟湖上清波郎朗
浏览 271回答 3
3回答

明月笑刀无情

行为主体主题是一种类型的主题,主题是一种特殊的可观察类型,因此您可以订阅消息,就像其他任何可观察到的一样。行为主体的独特特点是:它需要一个初始值,因为它必须始终在订阅时返回一个值,即使它没有收到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可以从这两个方面创建一个可观察的Subject和BehaviorSubject使用subject.asObservable().唯一的区别是,您不能将值发送到可观察的next()方法。在角度服务中,我会用BehaviorSubject对于作为角服务的数据服务,通常在组件和行为主题之前进行初始化,以确保使用该服务的组件接收到最后更新的数据,即使由于组件对该数据的订阅而没有新的更新。
打开App,查看更多内容
随时随地看视频慕课网APP