2016-02-22 30 views
6

Sono abbastanza nuovo per gli osservabili. Come creo Osservabile solo da una semplice stringa? Quindi iscriversi ad esso e inviarlo quando cambia.Osservabile da una stringa (Angolare 2)

Ha senso?

Non ho alcuna fortuna con la ricerca su google. Probabilmente parole chiave sbagliate?


Aggiunta del codice per spiegare meglio:

My constructor on service 

constructor() { 
    // Create observable stream to output our data 
    this.notice = Observable.create(
    (observer) => this.observer = observer; 
); 
}; 

My method on service 

set(string) { 
    this.notice.subscribe((value) => { 
    // Push the new value into the observable stream 
    this.observer.next(string); 
    }, (error) => console.log('Could not set data.')); 
} 

Calling service method 

setNotice(event) { 
    event.preventDefault(); 

    // Calling service to set notice 
    this.noticeService.set('This is a string'); 
} 

penso che sto facendo qualcosa di sbagliato qui? Ma non sono sicuro di come chiedere. Sarei grato per qualsiasi spiegazione.

+0

Waht about this.notice.unsubscribe() anche in ngDestroy()? So che è una causa comune di perdite di memoria per gli ascoltatori di eventi aggiunti manualmente ... Quindi presumo che questo sarebbe lo stesso. – JGFMK

+0

Anch'io considererei BehaviorSubject anche per questo. https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable – JGFMK

risposta

12

È possibile utilizzare il metodo of della classe Observable:

var obs = Observable.of('some string'); 

Modifica

Per quanto riguarda il codice del vostro servizio, ho woulsd refactoring del codice del metodo set in questo modo:

set(string) { 
    this.observer.next(string); 
} 

Puoi iscriverti allo notice proprietà in un'altra parte della domanda per essere notificato.

+0

grazie per aver mostrato questo. Mi chiedo come rendere "una stringa" come un valore variabile che potrebbe cambiare. Come spingerlo dentro Osservabile allora? –

+0

In effetti, non puoi. Detto questo puoi licenziare un evento quando il valore cambia. Per questo è necessario creare un osservabile non elaborato: 'Observable.create ((observer) => {observer.next ('some string');});'. Il metodo 'next' può essere chiamato più volte ... Si noti che è possibile impostare la variabile' observer' in una variabile all'esterno del callback. –

+0

Grazie ancora. Ho aggiunto qualche codice sopra. –

Problemi correlati