2016-01-22 4 views
9

Ich versuche ein Angular2 Observable einzurichten, das den neuesten Wert wiedergibt.Angular2 Observables - Replay

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); 
    } 
} 


ich Fehler ständig erhalten besagt:

Property 'Replay' existiert nicht auf Typ beobachtbare < {}>.

und

this.refining.replay ist keine Funktion


Hat jemand erfolgreich eine beobachtbare implementiert, die wieder abgeben wird es neueste Wert um neue Abonnenten ist?

Antwort

15

Nach dem MIGRATION Führer für RxJS5replay-publishReplay umbenannt wurde.

So sollten Sie durch Hinzufügen der richtigen Betreiber

import 'rxjs/add/operator/publishReplay'; 

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

Sie könnten verwenden ReplaySubject auch in Ordnung sein.

1

Ich glaube, Sie könnten versuchen, Ihren Code auf diese Weise REFACT:

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)); 
    } 
} 

Hier die entsprechende plunkr ist: https://plnkr.co/edit/TrCf8JEGO1toEMqiWg3D?p=preview.

Hoffe, es hilft Ihnen, Thierry