TL; DR :
नहीं, उन्हें मैन्युअल रूप से सदस्यता न दें, सेवाओं में उनका उपयोग न करें। उन्हें उपयोग करें जैसा कि प्रलेखन में केवल घटकों में घटनाओं का उत्सर्जन करने के लिए दिखाया गया है। कोणीय की अमूर्तता को पराजित न करें।
उत्तर:
नहीं, आपको इसे मैन्युअल रूप से सब्सक्राइब नहीं करना चाहिए।
EventEmitter एक कोणीय 2 अमूर्तता है और इसका एकमात्र उद्देश्य घटकों में घटनाओं का उत्सर्जन करना है। Rob Wormald की एक टिप्पणी का हवाला देते हुए
[...] EventEmitter वास्तव में एक कोणीय अमूर्तता है, और केवल घटकों में कस्टम ईवेंट का उत्सर्जन करने के लिए बहुत अधिक उपयोग किया जाना चाहिए। अन्यथा, बस Rx का उपयोग करें जैसे कि यह कोई अन्य पुस्तकालय था।
EventEmitter के प्रलेखन में यह वास्तव में स्पष्ट कहा गया है।
कस्टम ईवेंट का उत्सर्जन करने के लिए निर्देशों और घटकों द्वारा उपयोग करें।
इसका उपयोग करने में क्या गलत है?
Angular2 हमें कभी भी गारंटी नहीं देगा कि EventEmitter एक ऑब्जर्वेबल रहेगा। तो इसका मतलब है कि अगर यह बदल जाता है तो हमारे कोड को फिर से भरना। एकमात्र एपीआई जिसे हमें एक्सेस करना चाहिए वह है इसकी emit()
विधि। हमें कभी भी EventEmitter की सदस्यता नहीं लेनी चाहिए।
इस वार्ड बेल की टिप्पणी में उपरोक्त सभी अधिक स्पष्ट है (लेख को पढ़ने के लिए अनुशंसित है, और उस टिप्पणी का उत्तर )। संदर्भ के लिए उद्धरण
EventEmitter पर ध्यान न देने योग्य होने के लिए गिनती मत करो!
भविष्य में उन अवलोकनीय परिचालकों पर भरोसा मत करो!
इन्हें जल्द ही हटा दिया जाएगा और संभवतः रिलीज से पहले हटा दिया जाएगा।
EventEmitter का उपयोग केवल बच्चे और माता-पिता के घटक के बीच होने वाले घटना बंधन के लिए करें। इसकी सदस्यता न लें। उन तरीकों में से कोई भी कॉल न करें। केवल कॉल करेंeve.emit()
उनकी टिप्पणी बहुत समय पहले रॉब की टिप्पणी के अनुरूप है।
तो, इसे ठीक से कैसे उपयोग करें?
बस अपने घटक से घटनाओं का उत्सर्जन करने के लिए इसका उपयोग करें। निम्नलिखित उदाहरण देखें।
@Component({
selector : 'child',
template : `
<button (click)="sendNotification()">Notify my parent!</button>
`
})
class Child {
@Output() notifyParent: EventEmitter<any> = new EventEmitter();
sendNotification() {
this.notifyParent.emit('Some value to send to the parent');
}
}
@Component({
selector : 'parent',
template : `
<child (notifyParent)="getNotification($event)"></child>
`
})
class Parent {
getNotification(evt) {
// Do something with the notification (evt) sent by the child!
}
}
इसका उपयोग कैसे न करें?
class MyService {
@Output() myServiceEvent : EventEmitter<any> = new EventEmitter();
}
वहीं रुक जाओ ... तुम पहले से ही गलत हो ...
उम्मीद है कि ये दो सरल उदाहरण EventEmitter के उचित उपयोग को स्पष्ट करेंगे।