Subject是Observable(可观察对象)的子类,subject是多播的,允许将值多播给多个observer(观察者),普通observable是单播。
每一个Subject都是一个Observable(可观察对象),可以订阅(subscribe)它。
要给subject提供新值,只要调用next(theValue),它会将值theValue多播给已注册监听该subject的观察者们。
import {Component,OnInit} ngOnInit(){
<span style="color: #0000ff">const subject: Subject<<span style="color: #0000ff">string> = <span style="color: #0000ff">new Subject<<span style="color: #0000ff">string><span style="color: #000000">();
<span style="color: #0000ff">const subject: Subject<<span style="color: #0000ff">string> = <span style="color: #0000ff">new Subject<<span style="color: #0000ff">string><span style="color: #000000">();
</span><span style="color: #0000ff">const</span> subscriptionA: Subscription =<span style="color: #000000"> subject.subscribe(
(val: </span><span style="color: #0000ff">string</span>) =><span style="color: #000000"> {console.log(`observerA: $(val)`)};
);
</span><span style="color: #0000ff">const</span> subscriptionB: Subscription =<span style="color: #000000"> subject.subscribe(
(val: </span><span style="color: #0000ff">string</span>) =><span style="color: #000000"> {console.log(`observerB: $(val)`)};
);
subject.next(</span><span style="color: #800000">'</span><span style="color: #800000">博客</span><span style="color: #800000">'</span><span style="color: #000000">);
subject.next(</span><span style="color: #800000">'</span><span style="color: #800000">圆圆</span><span style="color: #800000">'</span><span style="color: #000000">);
subscriptionA.unsubscribe(); </span><span style="color: #008000">//</span><span style="color: #008000">取消订阅</span>
subscriptionB.unsubscribe(); <span style="color: #008000">//</span><span style="color: #008000">取消订阅</span>
subject.next(<span style="color: #800000">'</span><span style="color: #800000">取消订阅后</span><span style="color: #800000">'</span><span style="color: #000000">);
subject.complete();
}
每一个Subject也可以作为Observer(观察者),有如下方法:next(v),error(e), complete(); 可以把Subject作为参数传递给任何Observable的subscribe方法
import { Subject,Subscription,Observable} ngOnInit() {
<span style="color: #0000ff">const subject: Subject<<span style="color: #0000ff">string> = <span style="color: #0000ff">new Subject<<span style="color: #0000ff">string><span style="color: #000000">();
<span style="color: #0000ff">const subscriptionA: Subscription =<span style="color: #000000"> subject.subscribe(
(val: <span style="color: #0000ff">string) =><span style="color: #000000"> {
console.log(
}
);
<span style="color: #0000ff">const subscriptionB: Subscription =<span style="color: #000000"> subject.subscribe(
(val: <span style="color: #0000ff">string) =><span style="color: #000000"> {
console.log(
}
);
<span style="color: #0000ff">const subject: Subject<<span style="color: #0000ff">string> = <span style="color: #0000ff">new Subject<<span style="color: #0000ff">string><span style="color: #000000">();
<span style="color: #0000ff">const subscriptionA: Subscription =<span style="color: #000000"> subject.subscribe(
(val: <span style="color: #0000ff">string) =><span style="color: #000000"> {
console.log(
observerA: ${val}
);}
);
<span style="color: #0000ff">const subscriptionB: Subscription =<span style="color: #000000"> subject.subscribe(
(val: <span style="color: #0000ff">string) =><span style="color: #000000"> {
console.log(
observerB: ${val}
);}
);
</span><span style="color: #0000ff">const</span> observable: Observable<<span style="color: #0000ff">string</span>> = <span style="color: #0000ff">from</span>([<span style="color: #800000">'</span><span style="color: #800000">Raph</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">Don</span><span style="color: #800000">'</span><span style="color: #000000">]);
observable.subscribe(subject);
}