2016-04-08 14 views
7
export declare class EventEmitter<T> extends Subject<T> { 
    /** 
    * Creates an instance of [EventEmitter], which depending on [isAsync], 
    * delivers events synchronously or asynchronously. 
    */ 
    constructor(isAsync?: boolean); 
    emit(value: T): void; 
    /** 
    * @deprecated - use .emit(value) instead 
    */ 
    next(value: any): void; 
    subscribe(generatorOrNext?: any, error?: any, complete?: any): any; 
} 

आधिकारिक कोणीय 2 टाइपस्क्रिप्ट परिभाषा में, ऐसा लगता है कि EventEmitter से म्यूट करने या सदस्यता समाप्त करने का कोई तरीका नहीं है।एंगुलर 2 में EventEmitter से सदस्यता समाप्त कैसे करें?

मैं समय के साथ कॉलबैक मिला के रूप में पृष्ठों को एक ही EventEmitter

+0

दिखाएं कि आप इवेंट एमिटर का उपयोग कैसे कर रहे हैं इसके बजाय – Chrillewoodz

उत्तर

17

EventEmitter विषय फैली का उपयोग करें। जब आप किसी विषय की सदस्यता लेते हैं तो आपको Subscription मिलता है जिसे आप बाद में सदस्यता समाप्त करने के लिए उपयोग कर सकते हैं।

someOutput:EventEmitter = new EventEmitter(); 
... 
this.subscription = someOutput.subscribe(...); 
... 
this.subscription.unsubscribe(); 

सुझाव
कुछ और लेकिन @Output() रों लिए EventEmitter प्रयोग न करें। कोणीय गारंटी नहीं देता है कि EventEmitterSubject विस्तारित करेगा या भविष्य में Subject के समान काम करेगा।

+1

अरे मुझे विश्वास है कि आपका संकेत अब प्रभावी है। मेरा मानना ​​है कि लौटे हुए मूल्य से सदस्यता समाप्त करना अब असंभव है, क्या आप पुष्टि कर सकते हैं? –

+0

यह अभी भी v5.x में विषय बढ़ाता है, इसलिए यह अभी भी काम करेगा - https://github.com/angular/angular/blob/5.2.1/packages/core/src/event_emitter.ts#L10-L116 – mcgraphix

6

क्योंकि EventEmitters को only be used to emit events from components होना चाहिए, और इसलिए उन्हें सदस्यता नहीं लेनी चाहिए, एंगुलर को सदस्यता समाप्त करने का साधन प्रदान करने की आवश्यकता नहीं है।

यदि आप किसी घटक में आउटपुट प्रॉपर्टी का उपयोग नहीं कर रहे हैं, तो EventEmitter के बजाय एक अवलोकन या विषय का उपयोग करें।

शायद उन्हें नाम को आउटपुटप्रॉपर्टीइमीटर में बदलना चाहिए।