2016-12-06 59 views
18

我有我的分量EventEmitter但我不能編譯,因爲這個錯誤: 「提供的參數不匹配,通話對象的任何簽名」如何通過2個參數EventEmitter angular2

我的組件:

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

,但它不工作

回答

44

如果你看一下EventEmitter API的emit方法,就只能採取類型的單一參數T

emit(value?: T)

由於只允許單個參數,因此可以考慮在發射方法中傳遞參數object。同樣在下面的方法make & name變量保持其各自的值。

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

哦,好的,謝謝!它將this.addModel.emit({make:make,name:name}); – LorenzoBerti

+2

@echonax不需要這樣做,es6會照顧它[在這裏檢查](http://www.benmvp.com/learning-es6-enhanced-object-literals/) –

+0

好的!謝謝!! :) – LorenzoBerti

1

我固定它通過使

EventEmitter<object>(); 

然後我就能夠傳遞一個對象,如:

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

和它的工作。

+0

這很好,阿德姆。沒有什麼反對你的回答,但值得注意的是,一個標準的做法 - 一個好的做法 - 總是提供一個*事件對象與一個或多個值相結合*:'publish(event,value)'&'subscribe (e,value){...}'。我有點驚訝Angular定義了他們的界面/按照他們的方式實現了它。 – Cody