2016-02-05 16 views
6

Ben angular2 için yeniyim, bu yüzden sorunumu açıklarken yanlış şartları kullanırsam lütfen kusura bakmayın. Açısal2 bileşeninden EventEmitter kullanarak değişkenleri geçirebilir miyim?

Bir kullanıcı bir seçenek belirleyin sağlayan basit bir bileşen var. Şimdi bu seçeneği ana bileşene göndermek istiyorum. Bunu yapıyorum:
// 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); 
    } 
} 

ve ana bileşende

Böyle şablonuna şunlardır:

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

Ve işlev CALLES olsun, ama değişken tanımlanmamış:

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

konsol çıktısı:

günlük: onItemSelected (tanımlanmamış)

Yani ne eksik? Olay gönderilir ve işlev çağrılır, ancak parametre kaybedilir.

Belki seçilmiş Id bağlanarak diğer bazı form daha iyi tamamen olurdu. Ana bileşen görünüm bileşeninden yeni bir seçime tepki verebileceği sürece herhangi bir çözüme açıkım.

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

Eğer EventEmitter ait emit yönteminin parametresi olarak temin değeri buna karşılık gelir:

cevap

11

Sen olayı tetiklerken Gönderdiğiniz değeri elde etmek $event değişkeni kullanmak gerekir.

+0

Teşekkürler, bu hemen işe yaradı! Dokümanlarda görmek için çok mu kör oldu ya da bu gerçekten gizli mi? –

+0

Rica ederim! Artık özel bileşenlerin tetikleyebileceği olaylar için bu kadar net ... Hayır endişe ;-) –

+2

Dinleyiciye birden fazla parametre mümkün mü? ör., onItemSelected ($ olayı, daha fazla, daha fazla) '. Bir dizi olarak '$ event'i oluşturabilirim, ama merak ediyorum. – allenhwkim

İlgili konular