RxJS核心概念之Subjet在angular2+上的应用
Subject,在RxJS中是一类特殊的Observable(可观察对象),它可像多个Observer(观察者)推送值。
每一个Subject也可以作为Observer(观察者) Subject同样也是一个由next(v),error(e),和complete()这些方法组成的对象。调用next(theValue)方法后,Subject会向所有已经在其上注册的Observer多路推送theValue。
1、创建一个subjectService,实现可观察以及推送推功能
import {Injectable} from "@angular/core"; import { ReplaySubject } from "rxjs/ReplaySubject"; import { Observable } from "rxjs/Observable"; import 'rxjs/add/observable/of'; @Injectable() export class SubjectService { private _subject: ReplaySubject<string> = new ReplaySubject<string>(1); //新建一个可观测可观测 setCurrentValue(value: string): Observable<boolean> { //设置值 this._subject.next(value); return Observable.of(true); } currentValue(): Observable<string> {//推送值 return this._subject.asObservable(); } }
2、在组建中设置需要推送的值
constructor(private _subjectService: SubjectService) { } setValue() { this._subjectService.setCurrentValue('value').subscribe((result: boolean) => { if (!result) { console.log('可观察者设定失败'); return; } console.log('可观察者设定成功'); }); }
3、订阅、可订阅多个对象
subjectValue = ''; constructor(private _subjectService: SubjectService) { } ngOnInit() { this._subjectService.currentValue().subscribe((data: string) => { if (!data) { console.log('获取失败'); return; } this.subjectValue = data; }); }
参考网址
https://segmentfault.com/a/1190000005069851