Das vorherige Beispiel hat gezeigt, wie sich mit @Input Daten in eine Komponente hineinreichen lassen. In diesem Schritt geht es nun um den umgekehrten Weg: Mit @Output können Informationen aus einer Komponente nach außen gegeben werden. Beispielsweise dann, wenn innerhalb der Komponente ein Ereignis wie das Anklicken eines Buttons auftritt. Die Kombination von @Input und @Output reicht bereits aus, um eine wiederverwendbare Dialogkomponente umzusetzen. Der folgende Code zeigt den TypeScript-Teil einer solchen Dialogkomponente. Über @Input werden der Titel des Dialogs sowie ein Status übergeben, der steuert, ob der Dialog sichtbar ist oder nicht. Über @Output gibt die Komponente ein Ereignis nach außen weiter, das einen booleschen Wert enthält. Dieses Ereignis wird ausgelöst, sobald im Dialog ein Button angeklickt wurde. In diesem Fall wird die Methode closeDialog aufgerufen.
import {Component, Input, Output, EventEmitter} from '@angular/core'; @Component({ selector: 'app-dialog', standalone: true, imports: [], templateUrl: './dialog.component.html', styleUrl: './dialog.component.scss' }) export class DialogComponent { @Input() title = ""; @Input() isOpen = false; @Output() onClose = new EventEmitter (); closeDialog(): void { this.onClose.emit(true); } }
Der HTML-Teil der Komponente bleibt kompakt und klar strukturiert. Der übergebene Titel wird direkt in einer H2-Überschrift dargestellt, während das
@if (isOpen) { }
Die Steuerung der Dialogsichtbarkeit liegt in der Elternkomponente. Zentral ist dabei eine Variable showDialog, die festlegt, ob der Dialog angezeigt wird oder nicht. Ein Klick auf den Button der Elternkomponente setzt diese Variable auf true, wodurch der Dialog sichtbar wird. Diese Steuerung erfolgt direkt im HTML und erfordert keine zusätzliche TypeScript-Funktion.
Wird hingegen innerhalb der Dialogkomponente – im Beispiel durch ein span-Element – der Button angeklickt, löst dies das Ereignis onClose aus. Dieses Ereignis ist als @Output deklariert und kann in der Elternkomponente ausgewertet werden. Dort wird die Variable showDialog wieder auf false gesetzt, was den Dialog wieder ausblendet.
Der im Dialog dargestellte Text erscheint genau an der Stelle des zuvor definierten
Dialog Demo
This is the dialog content.
The dialog can be closed by clicking 'Close Dialog' button
Die folgende Liste zeigt den TypeScript-Teil der Elternkomponente. Wie bereits erwähnt, fällt die Logik hier sehr überschaubar aus. Wesentlich sind lediglich die Variable zur Steuerung der Sichtbarkeit sowie der Import der Dialogkomponente.
import { Component } from '@angular/core'; import { DialogComponent } from '../dialog/dialog.component'; @Component({ selector: 'app-dialog-parent', standalone: true, imports: [DialogComponent], templateUrl: './dialog-parent.component.html', styleUrl: './dialog-parent.component.scss' }) export class DialogParentComponent { showDialog = false; }