web-dev-qa-db-ja.com

2つのパラメーターをEventEmitter angular2に渡す方法

コンポーネントにEventEmitterがありますが、次のエラーを返すためコンパイルできません:「指定されたパラメーターは呼び出しターゲットのシグネチャと一致しません」

私のコンポーネント:

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

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

this.addModel.emit()のパラメーターの1つを削除すると動作しますが、2つのパラメーターとその方法をeventEmitterに渡すことはできますか?

私も試しました:

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

しかし、それは動作しません

55
LorenzoBerti

EventEmitter APIのemitメソッドを見ると、T型のパラメーターを1つしか取得できません。

emit(value ?: T)

パラメータは1つしか許可されないため、emitメソッドのobjectのようにパラメータを渡すことを検討してください。同様に、以下のメソッドmakeおよびname変数はそれぞれの値を保持しています。

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

作ることで修正しました

EventEmitter<object>();

次に、次のようなオブジェクトを渡すことができました。

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

そしてそれは働いた。

16
Adham Amiin

強く入力する別のオプションは次のとおりです。

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

その後、@ Pankaj-Parkarショーのように送信できます

this.addModel.emit({make, name});
または
this.addModel.emit({make: 'honda', name: 'civic'});

これで、objectまたはanyを使用する代わりに、強い型付けができました。

12