6
Nel componente Angular2 uso EventEmitter per emettere un evento con parametro. Nel listener del componente padre questo parametro non è definito. Ecco un plunker:Il parametro dell'emettitore di eventi non è definito per l'ascoltatore
import {Component, EventEmitter, Output} from 'angular2/core'
@Component({
template: `<ul>
<li *ngFor="#product of products" (click)="onClick(product)">{{product.name}}</li>
</ul>`,
selector: 'product-picker',
outputs: ['pick']
})
export class ProductPicker {
products: Array<any>;
pick: EventEmitter<any>;
constructor() {
this.products = [
{id: 1, name: 'first product'},
{id: 2, name: 'second product'},
{id: 3, name: 'third product'},
];
this.pick = new EventEmitter();
}
onClick(product) {
this.pick.emit(product);
}
}
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<h2>Pick a product</h2>
<product-picker (pick)="onPick(item)"></product-picker>
</div>
<div>You picked: {{name}}</div>
`,
directives: [ProductPicker]
})
export class App {
name: string = 'nothing';
onPick(item) {
if (typeof item == 'undefined') {
console.log("item is undefined!");
} else {
this.name = item.name;
}
}
}
Come passare il prodotto scelto per componente padre?
Funziona, grazie. Non è chiaro per me perché questo è corretto, quindi: '(click) =" onClick (prodotto) '. Qui il parametro è un nome di variabile, non $ event, ma il valore è visibile al listener (passare $ event sarebbe inutile Voglio dire, quando è necessario usare la parola "$ event" come parametro e quando un altro nome può essere usato? – camcam
@camcam, quando ci colleghiamo a un evento personalizzato su un componente, '$ event' è lo speciale keyword che dobbiamo usare per ottenere il valore che era 'emit()' ted. Quando ci leghiamo a un evento DOM, come 'click',' $ event' è l'evento DOM. Per entrambi i tipi di binding, abbiamo anche accesso alle variabili di template locali, da qui il motivo per cui possiamo usare anche 'product'. –
Grazie mille @Thierry Templier, ho avuto lo stesso problema, ma è stato risolto quando ho usato $ event nel template del componente padre contenuto di ioni> –