I have in my component an EventEmitter but I can't compile it because it throws the 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 the parameters in this.addModel.emit() it works but is it possible to pass 2 parameters to EventEmitter and how?

4 Answers

If you look at the EventEmitter emit method @ angular.io, it can only take a single parameter of type T

emit(value?: T)

Since only a single parameter is allowed, consider passing it as an object in emit method.

In the snippet below, make & name variables are holding their respective values:

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

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.

1

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.

2

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); 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy