加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:26:31 所属栏目:安全 来源:网络整理
导读:我正在研究Angular 2 RxJs模式,我不明白行为主体和可观察者之间的区别。 从我的理解,行为主体是一个可以随时间变化的值(可以订阅,订阅者可以接收更新的结果)。这似乎是一个可观察的完全相同的目的。 什么时候可以使用Observable vs行为主题?在一个可观察
我正在研究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服务中,我将使用数据服务的行为主体作为角度服务,通常在组件和行为主体之前初始化,以确保消耗服务的组件接收到最后更新的数据,即使没有新的更新,因为组件订阅此数据。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读