2017-01-25 11 views
7

Gözlemlenebilir bir hizmet geliştiriyorum. Bu serviste, çeşitli tüketicilerin abone olayı almasını sağlamak için Gözlemlenebilir bir sonraki çağrıyı tetikleyen harici işlev çağrıları alıyorum. Gözlemci kurucusu sırasında hemen arayabilirim ve her şey harika çalışıyor, fakat bu harici kurucuların sonraki çağrıları tetikleyebilmesi için kurucunun dışına nasıl erişebilirim? Servis init sırasındaAngular2 Gözlemlenebilir - Gözlemcinin yapıcısının dışından nasıl çağrılır?

private myObservable$: Observable<any>; 

ben yukarıdaki açıkçası çalışmıyor

this.myObservable$.observer.next("next message"); 

gibi bir şey yürütmek isterler aynı hizmetin diğer yöntemlerde Sonra

this.myObservable$ = new Observable(observer => { 
    observer.next("initial message"); 
} 

do ama bu hedefi nasıl başarabilirim?

Ben

cevap

9

Ardından söz konusu

this.myObservable$ = new Subject(); 

Ve bir Subject oluşturmalıdır gözlenebilen en baştaki yapıcı dışında başka mesajlar gönderebilir bir yolu olmalı çünkü temel bir şey eksik farz ediyorum abone

this.myObservable$.next(...); 

Veya kullanmak:

Eğer herhangi bir noktada çağırabilir
this.myObservable$.subscribe(...) 
+0

hah zeki, teşekkürler ! Temel bir şeyi kaçırdığımı biliyordum. Şimdi bir çekicilik gibi çalışıyor ... –

2

iki yolu:

  1. myObservable $ genel yapın:

    public myObservable$: Observable; 
    
  2. konu akışında gözlemlenebilir Encapsulate ve aramak için bir yardımcı sağlamak sonraki:

    export class TestService { 
        public myObservable$: Observable; 
        private _myObservableSubject: Subject; 
    
        constructor() { 
        this._myObservableSubject = new Subject(); 
        this.myObservable$ = this._myObservableSubject.asObservable(); 
        } 
    
        public NextMessage(message?: string): void { 
        this._myObservableSubject.next(message); 
        } 
    } 
    
+0

Teşekkürler Boyan, sanki işe yaramış gibi görünüyor ama olsn'un cevabıyla yukarıda gidiyorum, çok daha özlü görünüyor. –

+0

Elbette, aynı şeyden bahsediyoruz. Cevabımı Angular 2 belgelerini okumadan aldım. Özellikle bu bölüm, https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –