How pass 2 parameters to EventEmitter angular2

2020-02-23 04:45发布

问题:

I have in my component a EventEmitter but I can't compile because return this error: "Supplied parameters do not match any signature of call target"

My component:

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

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

If i delete one of parameters in this.addModel.emit() it work, but so, Can i pass 2 parameters and how, to my eventEmitter?

I tried also with :

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

but It doesn't work

回答1:

If you look at the EventEmitter API's emit method, it can only take single parameter of type T

emit(value?: T)

Since only single parameter is allowed, consider passing parameter as in object in emit method. Likewise in below method make & name variable are holding their respective values.

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


回答2:

Another option to strongly type it is as follows:

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

you can then emit it like @Pankaj-Parkar shows

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

You now have strong typing instead of using object or any.



回答3:

I fixed it by making

EventEmitter<object>();

Then I was able to pass an object such as:

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

And it worked.



回答4:

I know this is an old Question for me I would create an interface and send it as an object where I can have my code more organized

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

and call it as following

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

    this.addModel.emit(savParamters);