2016-01-22 26 views
9

Sto provando a impostare un Angular2 Observable che riprodurrà il valore più recente.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); 
    } 
} 


ho continuamente ricevo errori affermando:

Proprietà 'Replay' non esiste sul tipo Observable < {}>.

e

this.refining.replay non è una funzione


chiunque ha implementato con successo un 'osservabile che si ri-emettere la sua ultima valore ai nuovi abbonati?

risposta

15

Secondo la guida MIGRATION per RxJS5replay è stato rinominato in publishReplay.

Quindi si dovrebbe andare bene aggiungendo l'operatore corretto

import 'rxjs/add/operator/publishReplay'; 

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

Si potrebbe utilizzare ReplaySubject pure.

1

penso che si potrebbe provare a refact il codice in questo modo:

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

Ecco corrispondente plunkr: https://plnkr.co/edit/TrCf8JEGO1toEMqiWg3D?p=preview.

Spero che ti aiuta, Thierry