Template-driven forms in Angular

"Cheat sheet" zu Template driven forms in angular

Template-driven forms ist die einfachste Variante für Formulare in Angular: Sie basieren auf den regulären Angular Templates in Verbindung mit ngModel für Databinding.

Um die Template-driven forms überhaupt verwenden zu können, muss FormsModule in der Applikation (app.module.ts) importiert werden:

...
import { FormsModule }   from '@angular/forms';
...
@NgModule({
  imports: [
    ...,
    FormsModule
  ],
  ...

Um ein Formular mit Template-driven forms zu gestallten, können wir die übliche Template Syntax in Angular verwenden:

<form #foobarForm="ngForm">
...
<input type="text" name="foobar.name" required [(ngModel)]="foobar.name">
...
</form>

Angular verbindet automatisch die ngForm Direktive mit dem <form> Formular-Element:

Angular setzt in Abhängigkeit vom Status einer Form Komponente eine entsprechende CSS-Klasse/Klassen:

Zur Anzeige von Fehlermeldungen benötigen wir noch eine Referenz auf die NgModel-Direktive der Eingabekomponente. Das bekommt man über eine "template reference variable" #foobarName="ngModel" :

<div>
    <label for="foobar-name">Name</label>
    <input type="text" id="foobar-name" 
           name="foobarName"
           #foobarName="ngModel" 
           [(ngModel)]="foobar.name" required>
    <div [hidden]="foobarName.valid || foobarName.pristine" class="danger">
        Das Feld darf nicht leer sein
    </div>
</div>

Damit kann man den Status des Eingabefeldes abfragen, zB: foobarName.valid und in Abhängigkeit davon eine Fehlermeldung anzeigen.

Als letztes behandeln wir noch das Submit/Absenden der Daten eines Formulars:

<form #foobarForm="ngForm" (ngSubmit)="submitFoobar()">
...
<button type="submit" [disabled]="!foobarForm.form.valid">Absenden</button>
...
</form>

Hier wird über die ngSubmit event-Eigenschaft die Methode submitFoobar aufgerufen, die in der zugehörigen Komponente definiert sein muss. Wir benötigen keinen zusätzlichen (click)-Handler an dem Submit-Button: Standardmäßig ruft ein mit type="submit" definierter Button immer die Submit-Routine des Formulars.