如何在 Angular 中将 2 个参数传递给 EventEmitter?

How pass 2 parameters to EventEmitter in Angular?

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

Supplied parameters do not match any signature of call target

我的组件:

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

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

如果我删除 this.addModel.emit() 中的一个参数,它可以工作,但是是否可以将 2 个参数传递给 EventEmitter 以及如何传递?

如果你看一下EventEmitter emit method @ angular.io,它只能接受一个T

类型的参数

emit(value?: 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);