2017-01-25 15 views
7

के बाहर से कॉल करने के लिए कैसे मैं एक सेवा तैयार कर रहा हूं जो एक पर्यवेक्षक का खुलासा करता है। इस सेवा में मुझे बाहरी फ़ंक्शन कॉल प्राप्त होते हैं जिन्हें अवलोकन पर अगली कॉल ट्रिगर करनी चाहिए ताकि विभिन्न उपभोक्ताओं को सब्सक्राइब ईवेंट मिल सके। पर्यवेक्षक कन्स्ट्रक्टर के दौरान मैं अगली कॉल कर सकता हूं और सबकुछ बढ़िया काम करता है, लेकिन मैं इसे कन्स्ट्रक्टर के बाहर कैसे एक्सेस कर सकता हूं ताकि बाहरी ट्रिगर्स अगली कॉल फायर कर सकें?कोणीय 2 पर्यवेक्षक - पर्यवेक्षक के निर्माता

private myObservable$: Observable<any>; 
सेवा init दौरान

मैं एक ही सेवा के अन्य तरीकों में फिर

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

कर रहा तरह

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

ऊपर स्पष्ट रूप से काम नहीं करता है कुछ निष्पादित करने में सक्षम होना चाहता हूँ , लेकिन मैं इस लक्ष्य को कैसे पूरा कर सकता हूं?

मैं यह सोचते हैं रहा हूँ मैं कुछ बुनियादी याद कर रहा हूँ के बाद से वहाँ नमूदार की प्रारंभिक निर्माता के बाहर आगे संदेशों फेंकना

उत्तर

9

आपको लगता है कि

this.myObservable$ = new Subject(); 

और फिर के लिए एक Subject बनाना चाहिए एक तरीका होना चाहिए आप किसी भी समय फोन कर सकते हैं:

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

या का उपयोग सदस्यता ली है:

+०१२३५१६४१०६
this.myObservable$.subscribe(...) 
+0

हा शानदार, धन्यवाद ! मुझे पता था कि मैं कुछ बुनियादी याद कर रहा था। अब एक आकर्षण की तरह काम करता है ... –

2

दो तरीके:

  1. myObservable $ सार्वजनिक करें:

    public myObservable$: Observable; 
    
  2. एक विषय धारा में नमूदार समाहित, और कॉल करने के लिए एक सहायक उपलब्ध कराने के लिए अगले:

    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

धन्यवाद बॉयन, दूसरा ऐसा लगता है जैसे यह काम करेगा लेकिन मैं ओल्सन के उत्तर के साथ जा रहा हूं, और अधिक संक्षेप में लगता है। –

+0

निश्चित रूप से, हम एक ही चीज़ के बारे में बात कर रहे हैं। मुझे अंगुलर 2 दस्तावेज़ पढ़ने से मेरा जवाब मिला। विशेष रूप से यह खंड, https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional- सेवा –

संबंधित मुद्दे