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