angular - 事件和行为主题之间的区别

标签 angular ionic2 rxjs

Events之间有什么区别?在 ionic 3 和 BehaviorSubject在 Angular“Rxjs”中订阅事件发出,例如,“当某些事件发生时,全局发出它”?

最佳答案

要理解 BehaviorSubject,有必要花时间理解 Subjects 的工作原理以及它们与普通 Observable 的区别。

Per Ben Lesh (a major contributor on Rxjs) : “Subject 和 Observable 之间一个更重要的区别是 Subject 有状态,它保存了一个观察者列表。”

因此,Subject 保留状态。如需进一步阅读,我鼓励您 read the distinction between "Hot" observables and "Cold" observables .

BehaviorSubject 与 Subject 的不同之处在于,任何订阅它的消费者都会立即将 BehaviorSubject 的最新值发送给它。

所以,假设我们有一个应用程序有一个 BehaviorSubject 发出当前用户的用户名。假设我们的主页组件订阅了这个 BehaviorSubject。一旦该订阅被初始化(在主页中),用户名值就会被发送给它。时间流逝,仍然是同一个用户登录。说 DetailsPage 只是现在已经订阅了同一个 BehaviorSubject。用户名在此期间没有更改,但无论如何,当这个新订阅被初始化时,该值将被发出。

据我所知,事件(在 Ionic 中)用于订阅和广播全局事件。 BehaviorSubject 可以是任何范围的,通常不是全局的。

我会说主题更接近于事件。 Subject 可以有一个值推送给它(就像 Event 已经发布),它也可以像 Event 一样被订阅。

尽管如此,Subject 通常不受任何范围的限制。也就是说,它并非旨在始终在应用程序的全局范围内使用。

关于angular - 事件和行为主题之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059563/

相关文章:

android - 如何使用 crypto-js 以与在 Angular 中相同的方式在 android 中加密数据

css - 如何使用ion-row和ion-col对齐ionic 2中的元素?

javascript - 无法在订阅主体内的 setState Hook 中调用先前状态的对象方法

typescript - 为什么 takeWhile 运算符在包含时不过滤?

javascript - 如何解释 Observable.of(Math.random()) 总是返回相同的值?

html - Angular 中的生命周期钩子(Hook)

javascript - 如何从 Angular5 组件 mydaterangepicker 中删除 "position: absolute"?

javascript - 使用 TypeScript 从表单输入中获取值

web-services - 如何在 ionic 2 中实现 HUD(微调器/事件指示器)?

angular2-jwt token.split 不是函数