问题
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});
orthis.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);
来源:https://stackoverflow.com/questions/41003639/how-pass-2-parameters-to-eventemitter-angular2