160 votes

Comment passer à 2 paramètres aux EventEmitter angular2

J'ai dans mon élément, une EventEmitter mais je ne peux pas compiler parce que renvoie cette erreur: "Paramètres fournis ne correspondent pas à la signature de l'appel de la cible"

Mon composant:

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

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

Si je supprime l'un des paramètres en this.addModel.emit() ça marche, mais oui, puis-je passer 2 paramètres et comment, à mon eventEmitter?

J'ai essayé aussi avec :

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

mais Ça ne fonctionne pas

280voto

Pankaj Parkar Points 45409

Si vous regardez l' EventEmitter API emit méthode, il ne peut prendre seul paramètre de type T

émettre(valeur?: T)

Depuis un seul paramètre est autorisé, à envisager l'adoption d'paramètre comme en object dans émettent de la méthode. De même ci-dessous la méthode make & name variable sont la tenue de leurs valeurs respectives.

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

91voto

Andy Danger Gagne Points 735

Une autre option fortement, elle est comme suit:

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

vous pouvez alors émettre comme @Pankaj-Parkar montre

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

Vous avez maintenant taper fort au lieu d'utiliser object ou any.

25voto

Adham Amiin Points 357

Je le fixe en le faisant

EventEmitter<object>();

Ensuite, j'ai été en mesure de passer à un objet tel que:

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

Et cela a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X