如何将2个参数传递给EventEmitter angular2

Lor*_*rti 65 eventemitter angular

我在我的组件中有一个EventEmitter但我无法编译因为返回此错误:"提供的参数与调用目标的任何签名都不匹配"

我的组件:

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

saveModel($event, make, name) {
    this.addModel.emit(make, name);
}
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过:

@Output() addModel = new EventEmitter<any,any>();
Run Code Online (Sandbox Code Playgroud)

但它不起作用

Pan*_*kar 138

如果你看一下EventEmitterAPI的emit方法,它只能采用单个参数类型T

发射(值?:T)

由于只允许单个参数,因此请考虑object在emit方法中传递参数.同样在下面的方法makename变量保持它们各自的值.

this.addModel.emit({make: make, name: name});
//shorthand is below
this.addModel.emit({make, name});
Run Code Online (Sandbox Code Playgroud)

  • @echonax不需要这样做,es6会照顾它[在这里查看](http://www.benmvp.com/learning-es6-enhanced-object-literals/) (4认同)
  • 哦,好的,谢谢!它将this.addModel.emit({make:make,name:name}); (2认同)

And*_*gne 22

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

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

你可以像@ Pankaj-Parkar节目一样发出它

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

你现在有强大的打字而不是使用objectany.


小智 16

我通过制作来修复它

EventEmitter<object>();
Run Code Online (Sandbox Code Playgroud)

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

this.MyOutputVariable.emit({ name: 'jack', age: '12' });
Run Code Online (Sandbox Code Playgroud)

它奏效了.

  • 投票赞成强类型解决方案,例如“new EventEmitter&lt;{name: string,age: number}&gt;();” (3认同)

小智 6

我知道这对我来说是一个老问题我会创建一个界面并将其作为一个对象发送,在那里我可以让我的代码更有条理

 export interface addModelArgs{
      make:string,
      name:string
    }
@Output() addModel = new EventEmitter<addModelArgs>();
Run Code Online (Sandbox Code Playgroud)

并将其称为如下

    this.addModel.emit({make: 'honda', name: 'civic'});
or 
    let savParamters:addModelArgs={make: 'honda', name: 'civic'};

    this.addModel.emit(savParamters);
Run Code Online (Sandbox Code Playgroud)