EventEmitter को Angular में 2 पैरामीटर कैसे पास करें?


98

मेरे घटक में है, EventEmitterलेकिन मैं इसे संकलित नहीं कर सकता क्योंकि यह त्रुटि फेंकता है:

माना जाता है कि मानदंड कॉल लक्ष्य के किसी भी हस्ताक्षर से मेल नहीं खाते हैं

मेरा घटक:

@Output() addModel = new EventEmitter<any>();

saveModel($event, make, name) {
  this.addModel.emit(make, name);
}

अगर मैं this.addModel.emit()इसमें काम करने वाले किसी एक पैरामीटर को हटाता हूं, लेकिन क्या 2 मापदंडों को पास करना संभव है EventEmitterऔर कैसे?

जवाबों:


190

यदि आप EventEmitter emit method @ angular.io को देखें , तो यह केवल एक ही प्रकार का पैरामीटर ले सकता हैT

उत्सर्जन (मान ?: T)

के बाद से केवल एक ही पैरामीटर अनुमति दी है, एक के रूप में इसे पारित करने पर विचार objectमें emitविधि।

नीचे दिए गए स्निपेट में, makeऔर nameचर अपने संबंधित मूल्य धारण कर रहे हैं:

this.addModel.emit({make: make, name: name});
//shorthand is below
this.addModel.emit({make, name});

2
ओह, ठीक है, थैंक्यू! यह यह होगा ।addModel.emit ({बनाओ: बनाओ, नाम: नाम});
लोरेंजो बर्टी 19

4
@ टेकनैक्स को ऐसा करने की कोई आवश्यकता नहीं है, es6 यहाँ पर
पंकज पारकर

मैं मूल घटक में इस मान को कैसे देख / ले सकता हूँ?
रोशिनी

@roshini कृपया एक नज़र डालें कि कैसे घटक बातचीत होती है, मूल रूप से आपको EventEmitterऑब्जेक्ट का उपयोग करके चाइल्ड घटक से मूल घटक तक डेटा का उत्सर्जन करने की आवश्यकता है ..
पंकज पारकर

आपकी प्रतिक्रिया के लिए धन्यवाद, मैं घटकों के बीच इस emitter जानता हूं, लेकिन निर्देशन से घटक को डेटा पारित करने के रूप में बातचीत की जरूरत है ..
roshini

44

एक अन्य विकल्प यह दृढ़ता से टाइप करने के लिए है:

@Output addModel = new EventEmitter<{make: string, name: string}>();

फिर आप इसे @ पंकज-पारकर शो की तरह फेंक सकते हैं

this.addModel.emit({make, name});
या
this.addModel.emit({make: 'honda', name: 'civic'});

अब आपके पास उपयोग करने के बजाय मजबूत टाइपिंग है objectया any


23

मैंने इसे बनाकर तय किया

EventEmitter<object>();

तब मैं एक वस्तु को पास करने में सक्षम था जैसे:

this.MyOutputVariable.emit({ name: 'jack', age: '12' });

और इसने काम किया।


1
यह महान है, अधम। आपके उत्तर के खिलाफ कुछ भी नहीं है, लेकिन यह ध्यान देने योग्य है कि एक मानक अभ्यास - और एक अच्छा अभ्यास - हमेशा एक वस्तु को 1 या अधिक मूल्यों के साथ मिलकर आपूर्ति करना है : publish(event, value)& subscribe(e, value) {...}। मुझे थोड़ी हैरानी हुई कि एंगुलर ने उनके इंटरफेस को परिभाषित किया / जिस तरह से उन्होंने इसे लागू किया।
कोड़ी

2
दृढ़ता से प्रकार के समाधानों के पक्ष में नीचे दिए गए जैसेnew EventEmitter<{name: string, age: number}>();
लिरियो

5

मुझे पता है कि यह मेरे लिए एक पुराना प्रश्न है मैं एक इंटरफ़ेस बनाऊंगा और इसे एक ऑब्जेक्ट के रूप में भेजूंगा जहां मैं अपना कोड अधिक व्यवस्थित कर सकता हूं

 export interface addModelArgs{
      make:string,
      name:string
    }
@Output() addModel = new EventEmitter<addModelArgs>();

और निम्नलिखित के रूप में कॉल करें

    this.addModel.emit({make: 'honda', name: 'civic'});
or 
    let savParamters:addModelArgs={make: 'honda', name: 'civic'};

    this.addModel.emit(savParamters);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.