2017-07-04 15 views
5

क्या प्राप्त करने के लिए है मैं विश्व स्तर पर angular2 में एक कस्टम ईवेंट फेंकना चाहते हैं और कई घटकों इतना ही नहीं, अभिभावक-बच्चे पैटर्नउत्सर्जन घटनाओं विश्व स्तर पर

मेरी घटना स्रोत घटक में यह बात सुनो होता कोशिश कर रहा हूँ, मेरे पास है

export class EventSourceComponent{ 

    @Output() testev = new EventEmitter(); 

    onbtnclick(){ 
    this.testev.emit("i have emitted an event") 
    } 
} 

अब मैं अन्य घटकों की तरह इस घटना

export class CmpTwoComponent{ 

    //here get the emitted event with data 
    } 

मैं ऊपर कैसे प्राप्त करते हैं पाने के लिए चाहते हैं?

उत्तर

3

आप इसके लिए साझा सेवा का उपयोग कर सकते हैं।

export class EventSourceComponent{ 
    constructor(private sharedService : SharedService){} 


     onbtnclick(){ 
     this.sharedService.testev.next("i have emitted an event") 
     } 
} 

export class CmpTwoComponent{ 

//here get the emitted event with data 

    constructor(sharedService : SharedService){ 

     sharedService.testev.subscribe((event)=>{console.log(event)}) 
    } 

} 

और फिर sharedService

@Injectable() 
export class SharedService{ 

    public testev = new Subject() 

} 

जाहिर है हो सकता है, अगर आप अभी भी Output की जरूरत है ताकि माता-पिता घटक सामान्य रूप से सदस्यता लेने के लिए सक्षम हो सकता है, तो आप ऐसा भी जोड़ सकते हैं:

export class EventSourceComponent{ 

    @Output() testev = new EventEmitter(); 
    constructor(private sharedService : SharedService){} 


     onbtnclick(){ 
     this.testev.emit("i have emitted an event") 
     this.sharedService.testev.next("i have emitted an event") 
     } 
} 
+0

आपको अपनी सेवाओं के अंदर 'EventEmitter' का उपयोग नहीं करना चाहिए; https://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter। इसके बजाए 'अवलोकनयोग्य'/'विषय 'का प्रयोग करें। – echonax

+0

बहुत बढ़िया मिलड धन्यवाद –

1

अंगुलर में कोई पैटर्न नहीं है जो आप जो मांगते हैं उसे प्राप्त करने की अनुमति देता है।

सबसे अच्छा विकल्प जो मैं आपके लिए सोच सकता हूं वह एक कस्टम सेवा बनाना होगा। कुछ सेवा बनाएं जो आप AppComponent में इंजेक्ट करते हैं (इसलिए सेवा का एक उदाहरण है)। सेवा में आप जो भी तर्क चाहते हैं वह हो सकता है।

+0

कोणीय 2 में वैश्विक घटनाओं के लिए, आप इसे देखना चाहेंगे: https://modewagon.wordpress.com/2017/09/12/angular2-4-global-events/ मदद कर सकता है –

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