角2 – 角2 – 行为主体与可观察?

前端之家收集整理的这篇文章主要介绍了角2 – 角2 – 行为主体与可观察?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究Angular 2 RxJs模式,我不明白行为主体和可观察者之间的区别。

从我的理解,行为主体是一个可以随时间变化的值(可以订阅订阅者可以接收更新的结果)。这似乎是一个可观察的完全相同的目的。

什么时候可以使用Observable vs行为主题?在一个可观察的情况下使用行为主体是否有好处?反之亦然?

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

>行为主体需要一个初始值,因为它必须始终返回一个订阅值,即使它没有收到一个next()
>订阅后,返回主题的最后一个值。一个常规的observable只有在接收到onnext时才触发
>在任何时候,您可以使用getValue()方法在不可观察的代码中检索主题的最后一个值。

与观察者相比,主题的独特特征是:

>除了作为可观察者之外,它是一个观察者,所以你也可以发送值到主题,除了订阅

此外,您可以使用行为主体上的asobservable()方法从行为主体获取可观察值。

可观察的是一般的,行为主体在技术上是可观察的子类型,因为行为主体是具有特定质量的可观察的。

行为主题示例:

// Behavior Subject

// a is a initial value. if there is a subscription 
// after this,it would get "a" value immediately
let 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 c
bSubject.next("d"); // Subscription got d

例2与常规科目:

// Regular Subject

let 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 c
subject.next("d"); // Subscription got d

可以使用subject.asobservable()从常规和行为主体创建可观察值。只有不同的是你不能发送值到可观察使用next()方法

在angular2服务中,我将使用数据服务的行为主体作为角度服务,通常在组件和行为主体之前初始化,以确保消耗服务的组件接收到最后更新的数据,即使没有新的更新,因为组件订阅此数据。

猜你在找的Angularjs相关文章