2017-12-06 4 views
0

So habe ich eine Veranstaltung Emitter funktioniert gut. In meinem Kind, rufe ich eine Funktion:Angular 4 Event Emitter nicht emittieren

(click)="EnterEditMode() 

die Brände:

EnterEditMode(){ 
    this.enterEdit.emit(null); 
    } 

In meinen Eltern habe ich dann:

enterEdit(){ 
    console.log("got some text"); 
    } 

Diese einwandfrei funktioniert. Aber jetzt möchte ich eine zweite Ausgabe direkt daneben hinzufügen. So in dem Kind, ich rufe:

SaveChanges(); 

, die eine Funktion auslöst:

SaveChanges() { 
    this.saveChanges.emit(null); 
    console.log("save"); 
    } 

Als ich nenne dies das Konsolenprotokoll ausgelöst wird, aber die emit nicht ausgelöst. Mein Elternteil hat eine Funktion, die nie aufgerufen wird.

saveChanges() { 
    console.log("saving changes"); 
    this.editing ? this.editing = false : this.editing = true; 
    } 

Ich kann wirklich nicht sehen, was ich falsch mache und habe Ärger zu schießen versucht, aber ich bin keine Fehler bekommen, nur das Konsolenprotokoll, dass die „Savechanges()“ aufgerufen wurde. Fehle ich etwas über Emitter?

bearbeiten meine Veranstaltung Emittern

In meinem Kind Komponente zeigen I:

@Output() enterEdit = new EventEmitter<any>(); 
@Output() saveChanges = new EventEmitter<any>(); 

Wieder arbeitet enterEdit aber savechanges nicht ...

+0

Zeigen Sie uns, wo und wie Sie die Ereignisstrahler erklärt haben, bitte. –

+0

Bitte zeigen Sie die Emitter- und HTML-Deklaration an, an die Sie die Ereignisse binden. –

+0

Ursprüngliche Frage eingestellt. Vielen Dank. – DKinnison

Antwort

0

So dies zurückzuführen ist zu einem grundlegenden Missverständnis darüber, wie Output Emitter in Angular arbeiten.

Falsche Annahme Das einfache Auslösen eines Senders würde meinen Controller zwingen zu reagieren.

Lösung In meiner HTML-Datei, habe ich den Hörer zu einem Elemente hinzuzufügen und dann das Ereignis aus der html an den Controller übergeben. Dies veranlasst den Controller zu tun, was auch immer die Funktion tun soll.

In meiner .html-Datei muss ich (saveChanges) = 'saveChanges ($ event)' zu meiner benutzerdefinierten Komponente hinzufügen. Das funktioniert.

Verwandte Themen