我的组件中有EventEmitter
,但我无法编译,因为返回此错误:
"提供的参数与呼叫目标的任何签名都不匹配"
我的组件:
@Output() addModel = new EventEmitter<any>();
saveModel($event, make, name) {
this.addModel.emit(make, name);
}
如果我删除了this.addModel.emit()
中的一个参数,那么它是否可行,但是,我可以将2个参数传递给我的eventEmitter吗?
我也尝试过:
@Output() addModel = new EventEmitter<any,any>();
但它不起作用
答案 0 :(得分:103)
如果您查看EventEmitter
API的emit
方法,则只能使用T
类型的单个参数
发出(值?:T)
由于只允许单个参数,因此请考虑在emit方法中传递object
中的参数。同样在下面的方法make
&amp; name
变量保持各自的值。
this.addModel.emit({make: make, name: name});
//shorthand is below
this.addModel.emit({make, name});
答案 1 :(得分:16)
我通过制作
来修复它EventEmitter<object>();
然后我能够传递一个对象,例如:
this.MyOutputVariable.emit({ name: 'jack', age: '12' });
它有效。
答案 2 :(得分:12)
另一个强类型输入的选项如下:
@Output addModel = new EventEmitter<{make: string, name: string}>();
然后您可以像@ Pankaj-Parkar的表演一样发出它
this.addModel.emit({make, name});
或
this.addModel.emit({make: 'honda', name: 'civic'});
您现在可以轻松键入文字,而不必使用object
或any
。
答案 3 :(得分:1)
我知道这是一个老问题 对我来说,我将创建一个接口并将其作为对象发送,使我的代码更井井有条
export interface addModelArgs{
make:string,
name:string
}
@Output() addModel = new EventEmitter<addModelArgs>();
并按以下方式命名
this.addModel.emit({make: 'honda', name: 'civic'});
or
let savParamters:addModelArgs={make: 'honda', name: 'civic'};
this.addModel.emit(savParamters);