如何以角度向 EventEmitter 传递2个参数?

我的组件中有一个 EventEmitter,但是我不能编译它,因为它会抛出错误:

提供的参数与调用目标的任何签名都不匹配

我的组成部分:

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


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

如果我删除其中一个参数在 this.addModel.emit()它的工作,但是有可能传递2个参数到 EventEmitter和如何?

144436 次浏览

如果查看 EventEmitter 发出 method@angular.io,它只能采用 T类型的单个参数

发射(值? : T)

因为只允许一个参数,所以考虑在 emit方法中将其作为 object传递。

在下面的代码片段中,makename变量保存着它们各自的值:

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

我通过制造

EventEmitter<object>();

然后我能够传递一个对象,比如:

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

而且成功了。

强类型的另一种选择如下:

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

然后你可以像@Pankaj-Parkar 一样发射它

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

您现在可以使用强类型代替使用 objectany

我知道这是个老问题了 对我来说,我会创建一个接口,并将其作为一个对象发送,在这里我可以让我的代码更有组织

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