2017-01-27 3 views
0

Ich habe eine Vorlage wie folgt:Angular 2: Eventemitter

<main> 
    <footer></footer> 
</main> 

ich einen Wert aus der Fußzeile auf die Hauptkomponente emittieren soll. Auf meinem Elternteil habe ich eine Funktion namens setStepCounter(value : number) : void. Als ich die eventemitter meiner Fußzeilenkomponente hinzufügen wie folgt:

@Component({ 
    selector: 'footer', 
    template: `<ng-content></ng-content> `, 
    host: { 
     '(stepCounterEmitter)': 'setStepCounter($event)' 
    } 
}) 

bekomme ich folgende Fehlermeldung: self.context.setStepCounter keine Funktion ist.

Antwort

0
@Component({ 
    selector: 'footer', 
    template: `<ng-content></ng-content> <button (click)="nextCounter()>click me</button> `, 
}) 
export class Footer { 
    @Output() stepCounter:EventEmitter<number> = new EventEmitter(); 

    private counter:number = null; 
    nextCounter() { 
    this.stepCounter.emit(this.counter.++); 
    } 
} 
<main #main> 
    <footer (stepCounter)="main.setStepCounter($event)"></footer> 
</main> 
export class MainComponent { 
    setStepCounter(event:any) { 
    ... 
    } 
} 
+0

Vielen Dank für Ihre Antwort. Ich möchte irgendwie vermeiden, es auf das Element selbst zu legen, nur um es sauber zu halten. Gibt es eine Möglichkeit, dies hinter den Bildschirmen zu tun? – user2963570

+0

Vielleicht würde ein Ansatz mit einem Service zur Weitergabe der Daten besser passen. – user2963570

+0

Eigentlich war meine Antwort nicht vollständig korrekt. Vielleicht ist dies mehr, was Sie wollen http://stackoverflow.com/questions/35574220/angular-2-capture-events-from-ng-content/35575162#35575162 –

Verwandte Themen