Nicht in der Lage zu fangen die Ereignisse von EventEmitter in Angular2?
Ich geschrieben habe, ein basic-Winkel-Anwendung, die nutzt die EventEmitter-Klasse, aber ich kann nicht das hören Komponente zum abfangen des Ereignisses.
Hier ist mein code (mit alpha.27 auf Angular2 /Typoskript 1.5 kompilieren zu ES5)
Entschuldigt sich für das ausführliche Beispiel.
Irgendwelche Tipps, was ich falsch mache, was würde sehr geschätzt werden.
import {Component, View, EventEmitter} from 'angular2/angular2';
@Component({
selector: 'login',
events : ['loggedIn']
})
@View({
template: '<button type="button" (click)="submitForm()">Click Me</button>'
})
export class Login {
loggedIn = new EventEmitter();
constructor() {
}
submitForm() {
console.log("event fired");
this.loggedIn.next({});
}
}
@Component({
selector: 'app'
})
@View({
template: "<div>This is the application</div>"
})
export class App {
constructor() {
}
}
@Component({
selector: 'root'
})
@View({
template: '<app [hidden]=!showApp></app><login (loggedIn)="loggedIn()" [hidden]=showApp></login>',
directives: [ App, Login ]
})
export class Root {
showApp:boolean;
constructor() {
this.showApp = false;
}
loggedIn() {
console.log("event caught");
this.showApp = true;
}
}
- versuchen
(^loggedIn)
- Vielen Dank für Ihre Antwort. Ich habe versucht: (^loggedIn)="loggedIn()" aber das hat nicht das Problem gelöst.
- könnten wir entfernen diese Frage? es ist ziemlich verwirrend, weil ng2 wurde aktualisiert und jetzt weder die Frage noch die Antwort ist nicht up-to-date
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine funktionierende Plunker Ihrer app.
Ich denke, es waren ein paar Probleme.
(update)
in der Vorlage ist eine Art von Ereignis, so dass es nicht aufgerufen werden kannloggedIn
. Ich fand es einfacher, nur nennen die Veranstaltungupdate
insgesamt.Nur kämpfte mit diesem Problem mich.
Der Grund, warum es nicht funktioniert, ist aufgrund der bei den event-Namen. Wenn dieser benannt wurde loggedin eher als loggedIn es wäre okay gewesen.
Im template der Root-Klasse, sollten Sie übergeben $event in der loggedIn nennen:
Den Variablen "$event " stellt das Objekt, das Sie passieren in der nächsten Methode des loggedIn-emitter in der Login-Klasse. Natürlich, Ihre loggedIn Methode der Root Klasse sollte auch akzeptiert ein Objekt als argument.
(event)
auf der linken Seite aufgerufen(loggedIn)
, wenn der event-Typ ist(update)
.In meinem Fall habe ich vergessen zu schmücken, die in der Klasse mit
@Output()
z.B.Haben Sie gesehen,Beispiel? Viktor Savkin verwendet fast alles das gleiche wie Sie, aber ohne ein leeres Objekt in dieser Zeile:
Auf dem AngularU, Misko hat gezeigt, ein Beispiel mit EventEmitter: https://angularu.com/VideoSession/2015sf/angular-2-roadmap-update
ab 41:00