2016-12-06 16 views
18

mam w składniku a EventEmitter ale nie mogę skompilować, ponieważ powrót ten błąd: „Dostarczone parametry nie znaleziono żadnych podpis celu wywołania”Jak przekazać parametry do 2 EventEmitter angular2

Moja komponent:

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

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

Jeśli usunę jeden z parametrów w this.addModel.emit(), to działa, ale czy mogę przekazać 2 parametry i jak, do mojego eventEmitter?

Próbowałem również z:

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

ale to nie działa

Odpowiedz

44

Jeśli spojrzeć na emit metoda EventEmitter API, może to potrwać tylko jeden parametr typu T

emit(value?: T)

Ponieważ tylko jeden parametr wolno, przechodząc pod parametry jak w object w metodzie emitują. Podobnie jak w poniższej metodzie make & name zmiennej trzymają ich odpowiednich wartości.

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

Oh, ok, Dziękuję! będzie to this.addModel.emit ({make: make, name: name}); – LorenzoBerti

+2

@echonax nie trzeba tego robić, es6 zajmie się tym [sprawdź tutaj] (http://www.benmvp.com/learning-es6-enhanced-object-literals/) –

+0

ok! Dziękuję Ci!! :) – LorenzoBerti

1

Naprawiłem go poprzez

EventEmitter<object>(); 

Potem udało mi się przekazać obiekt takich jak:

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

I to działało.

+0

To jest świetne, Adham. Nie ma nic przeciwko twojej odpowiedzi, ale warto zauważyć, że standardową praktyką - i dobrą praktyką - jest zawsze dostarczanie obiektu zdarzenia * w parze z 1 lub więcej wartościami *: 'publish (event, value)' & 'subscribe (e, wartość) {...} '. Jestem trochę zaskoczony, że Angular zdefiniował ich interfejs/zaimplementował to tak, jak oni. – Cody

Powiązane problemy