2016-02-05 223 views
6

我是angular2的新手,所以如果在描述我的問題時使用了錯誤的術語,請原諒。我可以使用angular2組件中的EventEmitter傳遞變量嗎?

我有一個簡單的組件讓用戶選擇一個選項。現在我想分配這個選項給父組件。我這樣做:

// import the necessary angular2 resources: 
import {Component, Output, EventEmitter} from 'angular2/core'; 
... 
// create the emitter in my component class: 
export class MyClassThatLetsUserSelectSomeContentId{ 
    @Output() selectEvent: EventEmitter<any> = new EventEmitter(); 
    public selectedId: string; 
    // this does get called, showing the correct id in the console 
    onSelect(selectedItem: MyCustomItem){ 
     this.selectedId = selectedItem.id; 
     console.log("selectedId:" + this.selectedId); 
     this.selectEvent.emit(this.selectedId); 
    } 
} 

,並在主要成分包括我它在模板中是這樣的:

<my-selector-component (selectEvent)="onItemSelected(selectedItemId)"></my-selector-component> 

而且功能確實得到卡列斯,但變量未定義:

onItemSelected(selectedItemId: string){ 
    console.log("onItemSelected(" + selectedItemId + ")"); 
} 

控制檯輸出是:

log:onItemSelected(undefined)

那麼我錯過了什麼? 事件被髮送,函數被調用,但參數丟失

也許一些其他形式的綁定到選定的ID會更好。只要父組件可以對來自視圖組件的新選擇作出反應,我就可以接受任何類型的解決方案。

回答

11

您需要使用$event變量,讓你觸發事件時發送的值:

<my-selector-component (selectEvent)="onItemSelected($event)"> 
</my-selector-component> 

您提供作爲EventEmitteremit方法的參數的值對應於它。

+0

謝謝,這個工作馬上!我是否太盲目,無法在文檔中看到它,或者這真的是隱藏的? –

+0

不客氣!事件現在非常清楚,自定義組件可以觸發...無後顧之憂;-) –

+2

是否可能有多個參數給偵聽器?例如'onItemSelected($ event,more,more)'。我可以將'$ event'作爲一個數組,但只是好奇。 – allenhwkim

相關問題