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

时间:2016-12-06 19:49:55

标签: angular eventemitter

我的组件中有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>();

但它不起作用

4 个答案:

答案 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'});

您现在可以轻松键入文字,而不必使用objectany

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