web-dev-qa-db-fra.com

Comment passer 2 paramètres à EventEmitter angular2

J'ai dans mon composant un EventEmitter mais je ne peux pas compiler car je renvoie cette erreur: "Les paramètres fournis ne correspondent à aucune signature d'appel cible"

Mon composant:

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

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

Si je supprime un des paramètres dans this.addModel.emit() cela fonctionne, mais est-ce que je peux passer 2 paramètres et comment, à mon eventEmitter?

J'ai aussi essayé avec:

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

mais ça ne marche pas

60
LorenzoBerti

Si vous examinez la méthode EventEmitter de l'API emit, elle ne peut prendre qu'un seul paramètre de type T

émettre (valeur ?: T)

Etant donné que seul un paramètre est autorisé, envisagez de passer le paramètre comme dans object dans la méthode emit. De même, dans la méthode ci-dessous, les variables make & name conservent leurs valeurs respectives.

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

Une autre option pour taper fortement est la suivante:

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

vous pouvez alors l'émettre comme les spectacles @ Pankaj-Parkar

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

Vous avez maintenant une frappe forte au lieu d'utiliser object ou any.

17
Andy Danger Gagne

Je l'ai réparé en faisant

EventEmitter<object>();

Ensuite, j'ai pu passer un objet tel que:

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

Et ça a fonctionné.

16
Adham Amiin

Je sais que c'est une vieille question pour moi je créerais une interface et l'enverrais en tant qu'objet où je pourrais avoir mon code plus organisé

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

et appelez-le comme suit

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

    this.addModel.emit(savParamters);
1
khaled Dehia