Event-emitter-parameter ist nicht definiert für Hörer
In Angular2 Komponente ich verwenden EventEmitter zu emittieren, wird ein Ereignis mit parameter. In der übergeordneten Komponente listener dieser parameter nicht definiert ist. Hier ist ein plunker:
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;
}
}
}
Gewusst wie: übergeben Sie das ausgewählte Produkt zur übergeordneten Komponente?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie $event wie diesem:
Er entspricht dem Wert, den Sie beim erzählen der emit-Methode der verknüpften EventEmitter.
In deinem Fall die variable "item" bereitgestellt, die als parameter entspricht nichts.
(click)="onClick(product)
. Hier wird der parameter ist eine variable-name nicht $event, aber Wert ist sichtbar listener (übergeben $event wäre sinnlos hier). Ich meine, wenn es nötig ist, um das Wort "$event" als parameter und, wenn ein anderer name verwendet werden kann?$event
ist das spezielle Schlüsselwort, das müssen wir nutzen, um den Wertemit()
ted. Wenn wir eine Bindung zu einem DOM-event, wieclick
,$event
ist die DOM-event. Für eine Art der Bindung, haben wir auch Zugang zu lokalen template-Variablen, daher der Grund wir können auchproduct
.