// B Component
// send data from B Component
this.messageService.sendData("this message from subject b");
// C Component
// get data in C Component
this.subscription = this.messageService.getData()
.subscribe(val => {
this.message = val;
console.log(val);
});
在上面的代码例子中,不仅是在 component c 可以订阅拿到数据,在其他 component 中也可以订阅拿到数据。比如在 A Component 中定义如下代码:
// A Component
// get data in A Component
this.subscription = this.messageService.getData()
.subscribe(val => {
console.log("this is in componet A and " + val);
})
从 B Component 发出值,在 C Component 和 A Component 能拿到同样的值,这个就是多播。
在 RxJS 中有四种 Subject 分别是:
Subject
,BehaviorSubject
,AsyncSubject
,ReplaySubject
;这四种 Subject 都是特殊的 Observable
。数据生产者 vs 数据消费者
数据生产者是指 Observable(可观察对象),产生数据的一方。
数据消费者是指 Observers(观察者),接收数据的一方。
普通的 Observable 只是数据生产者,发送数据。
Subject,BehaviorSubject,AsyncSubject 和 ReplaySubject 即是生产者又是消费者
在这两个 components 中通过定义在 messageService 的 Subject 共享数据,通过
next()
方法使得 Subject 是数据生产者(可观察对象),通过asObservable()
使得 Subject 是数据消费者(Observers)。单播 vs 多播
在上面的代码例子中,不仅是在 component c 可以订阅拿到数据,在其他 component 中也可以订阅拿到数据。比如在 A Component 中定义如下代码:
从 B Component 发出值,在 C Component 和 A Component 能拿到同样的值,这个就是
多播
。Source