Template-Syntax
Property Binding
Mit Property Binding kann man Eigenschaften von HTML-Elementen dynamisch an Daten aus der Component-Klasse binden. Dadurch wird die Darstellung der Benutzeroberfläche automatisch aktualisiert, wenn sich die zugrunde liegenden Daten ändern.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: ` <input [value]="firstName" /> `,
})
export class AppComponent {
firstName = 'Levin';
}
In diesem Beispiel wird das HTML-Attribut value des <input>
-Elements an die Klassenvariable firstName
gebunden. Dabei kommen eckige Klammern zum Einsatz: [value]="firstName"
.
Unterschiede zur statischen Zuweisung
Ausdruck statt String
Die eckigen Klammern signalisieren Angular, dass der Inhalt als Ausdruck interpretiert werden soll.
[value]="firstName"
bedeutet: Setze die Eigenschaft value auf den aktuellen Wert der VariablenfirstName
.value="firstName"
behandelt „firstName“ als Zeichenkette und gibt diesen Text wortwörtlich ins Feld ein – unabhängig vom tatsächlichen Wert der Variable.
Automatische Aktualisierung
Wenn sich der Wert von firstName
in der Komponente ändert (z. B. von „Levin“ auf „Kathy“), wird auch die value
-Eigenschaft des Input-Feldes automatisch angepasst. Angular übernimmt das mithilfe seines Change Detection Mechanismus. So bleibt die Benutzeroberfläche stets synchron mit den Daten im Hintergrund.
Event Binding
Event Binding erlaubt es in Angular, auf Benutzeraktionen zu reagieren – zum Beispiel Mausklicks oder Tastatureingaben. Dabei wird ein HTML-Event mit einer Methode aus der Component-Klasse verknüpft.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `<button (click)="handleClick($event)">click me</button>`,
})
export class AppComponent {
handleClick(ev: MouseEvent) {
console.log('I was clicked!');
console.log(ev);
}
}
Im Template des Beispiels wird mit (click)="handleClick($event)"
eine Methode an das click
-Event des Buttons gebunden.
Runde Klammern
()
signalisieren Angular, dass es sich um ein Event Binding handelt.click
ist das native DOM-Event, das beim Klicken des Buttons ausgelöst wird.handleClick($event)
ruft die MethodehandleClick
auf, wenn der Klick passiert.$event
steht dabei für das Event-Objekt, das alle Details über das Ereignis enthält.
Man kann statt click
auch andere native oder benutzerdefinierte Events verwenden, z. B. mouseenter
, keyup
, blur
oder eigene Event-Namen bei Komponenten.
Interpolation
Interpolation ist ein einfacher Mechanismus in Angular, um Werte direkt im HTML-Template darzustellen. Sie wird durch doppelte geschweifte Klammern {{ }}
verwendet und eignet sich ideal, um Werte aus der Component-Klasse in Textinhalte einzubinden.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `<p>Hi, {{ name }}</p>`,
})
export class AppComponent {
name = 'Levin';
}
In diesem Beispiel wird der Wert der Variablen name im HTML-Template ausgegeben. Angular ersetzt {{ name }}
automatisch durch den aktuellen Wert von name
, in diesem Fall „Levin“. Das Ergebnis ist:
<p>Hi, Levin</p>
Two-Way Data Binding
Mit [(ngModel)]
kannst du in Angular ganz einfach eine Variable aus der Komponente mit einem Eingabefeld im Template synchronisieren – in beide Richtungen.
import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
@Component({
selector: 'app-root',
template: `<input [(ngModel)]="firstName" />`,
imports: [FormsModule],
})
export class AppComponent {
firstName = 'Levin';
}
[(ngModel)]
bindet die VariablefirstName
an das Eingabefeld.Änderungen im Feld aktualisieren automatisch
firstName
in der Klasse.Änderungen an
firstName
in der Klasse aktualisieren automatisch das Feld.
Template Variable
Mit einer lokalen Template-Variable kannst du direkt auf ein HTML-Element im Template zugreifen – ohne es über die Component-Klasse anzusprechen.
<p #myParagraph></p>
<button (click)="myParagraph.innerHTML = 'Once upon a time...'">Click me</button>
#myParagraph
erstellt eine lokale Variable, die sich auf das<p>
-Element bezieht.In der Button-Click-Methode greifen wir direkt auf
innerHTML
des Elements zu.
Embedded Templates
Mit kannst du einen DOM-Abschnitt vorbereiten, der zunächst nicht gerendert wird. Er dient als Vorlage, die du später bei Bedarf „abstempeln“ kannst – z. B. für wiederholte oder bedingte Anzeige von Inhalten.
<ng-template #myTemplate>
<p>Hello there</p>
</ng-template>
<ng-container *ngTemplateOutlet="myTemplate"></ng-container>
#myTemplate
ist eine lokale Template-Variable*ngTemplateOutlet="myTemplate"
rendert den Inhalt des Templates an dieser Stelle<ng-container>
erzeugt kein eigenes DOM-Element, ist also ideal für strukturelle Steuerung
Kontext
Du kannst Templates mit unterschiedlichen Daten (Kontext) wiederverwenden:
<ng-template #myTemplate let-greeting="greeting">
<p>{{ greeting }} there</p>
</ng-template>
<ng-container
[ngTemplateOutlet]="myTemplate"
[ngTemplateOutletContext]="{ greeting: 'Hi' }"
/>
<ng-container
[ngTemplateOutlet]="myTemplate"
[ngTemplateOutletContext]="{ greeting: 'Hello' }"
/>
<ng-container
[ngTemplateOutlet]="myTemplate"
[ngTemplateOutletContext]="{ greeting: 'Yo' }"
/>
Hier wird der Template-Inhalt mehrfach dargestellt, aber jeweils mit einem anderen greeting.
Directives
Eine Direktive in Angular ist ein Baustein, mit dem du das Verhalten eines bestehenden HTML-Elements oder einer Komponente erweitern oder verändern kannst – ohne ein eigenes Template zu definieren.
import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[highlightRed]',
})
export class HighlightRedDirective {
constructor(private el: ElementRef) {
this.el.nativeElement.style.backgroundColor = 'red';
}
}
@Directive
funktioniert ähnlich wie@Component
, aber ohne Template.Die Direktive wird an ein bestehendes Element angehängt.
Der selector: '
[highlightRed]
' bedeutet: Diese Direktive gilt für alle Elemente mit dem AttributhighlightRed
.
<my-component highlightRed></my-component>
Hier wird highlightRed
auf ein bestehendes Element angewendet. Die zugehörige Logik aus HighlightRedDirective
wird dann aktiv,
Structural Directives
Strukturelle Direktiven ändern die Struktur des DOMs. Zwei häufig genutzte Beispiele sind:
<section *ngIf="showSection"></section>
<li *ngFor="let item of items">{{ item }}</li>
*ngIf
zeigt ein Element nur an, wenn die Bedingung wahr ist.*ngFor
erzeugt ein Element für jedes Item in einer Liste.
Damit das funktioniert, musst du CommonModule
(oder gezielt NgIf
/NgFor
) importieren:
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-root',
standalone: true,
template: `<p *ngIf="shouldDisplay">hello</p>`,
imports: [CommonModule],
})
export class AppComponent {
shouldDisplay = true;
}
@
-Syntax für Kontrollfluss
@
-Syntax für KontrollflussAngular unterstützt eine neue eingebaute Syntax zur Steuerung der Anzeige von Elementen:
@if
@if (showSection) {
<section></section>
}
Mehrere Bedingungen
@if (a) {
<p>A</p>
} @else if (b) {
<p>B</p>
} @else {
<p>Fallback</p>
}
@for
@for (item of items; track $index) {
<li>{{ item }}</li>
}
Kein Import von Direktiven notwendig.
Klarere Syntax für komplexere Bedingungen.
Performance-Tracking wird automatisch eingefordert.
Zuletzt aktualisiert