Angular2 Observables——回放

Angular2 Observables -- Replay

我正在尝试设置一个将重播最新值的 Angular2 Observable。

import {Injectable} from 'angular2/core';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class RefinementService {
    refining: any;
    private r: any;
    constructor() {
        this.refining = new Observable(observer => this.r = observer).replay(1);
    }
}


我不断收到错误消息:

Property 'replay' does not exist on type Observable<{}>.

this.refining.replay is not a function


有没有人成功地实现了一个可以将它的最新价值重新发送给新订阅者的可观察对象?

我认为您可以尝试以这种方式重构您的代码:

import {Injectable} from 'angular2/core';
import {Observable,ReplaySubject} from 'rxjs/Rx';

@Injectable()
export class RefinementService {
  refining: any;
  private r: any;
  constructor() {
    this.refining = new Observable(observer => this.r = observer)
        .subscribe(new ReplaySubject(1));
  }
}

这里是对应的plunker:https://plnkr.co/edit/TrCf8JEGO1toEMqiWg3D?p=preview.

希望对你有帮助, 蒂埃里

根据 MIGRATION guide for RxJS5 replay 重命名为 publishReplay

因此,添加正确的运算符应该没问题

import 'rxjs/add/operator/publishReplay';

// Component
this.refining = new Observable(observer => this.r = observer).publishReplay(1);

您也可以使用 ReplaySubject