Angular, Webentwicklung
August 13, 2017
Das ist ein Beitrag folgender Beitrags-Reihe: Angular: Einführung in die Reactive Forms

Angular Reactive Forms ist eines meiner Lieblingsfeatures von Angular überhaupt. In der neuen Version von Angular (ab der Version 2) gibt es zwei unterschiedliche Vorgehen bei der Erstellung von Formularen. Zum einen gibt es den Template-driven Ansatz, der auf Direktiven im Template und Zwei-Wege-Datenbindung (two way databinding) basiert. Zum anderen gibt es den flexibleren Reactive Forms Ansatz, bei dem man die Formulare direkt in der component-Klasse definiert und mit Hilfe von Objekten modelliert. Um die Daten aus dem Formular zu holen und die Daten an das Formular zu übertragen, verwendet man das Paradigma reactive programming. Daher der Name Angular Reactive Forms.

Innerhalb dieses Beitrags werden Techniken präsentiert, die es ermöglichen, folgendes beispielhaftes Formular zu bauen.

Beispiel auf GitHub ansehen

Vorteile von Angular Reactive Forms im Überblick:

  • Sehr gute Möglichkeiten die Formulare mit unit tests zu testen
  • Saubere Trennung des Template (Darstellung) von der Logik
  • Sehr gute Möglichkeiten dynamische Forms z.B anhand einer JSON-Schema-Datei zu erstellen
  • Sehr gute Unterstützung für komplexe validierungsabläufe

Kernbestandteile von Angular Reactive Forms.

 

1. FormGroup – aggregiert Werte von allen unterliegenden FormControls und mündet sie in ein Objekt, das den Namen des FormControls als Schlüssel verwendet. Ein Root-Element eines reactive form ist immer eine FormGroup.

FormGroup interface.

  • controls – ein Objekt mit sämtlichen FormControls. Der Schlüssel ist hier der Name des jeweiligen FormControls.
  • registerControl – registriert ein FormControl für die FormGroup. Der Wert und Gültigkeitsstatus der FormGroup bleibt aber unverändert.
  • addControl – fügt einen neuen FormControl hinzu und aktualisiert value und validity
  • removeControl – entfernt einen FormControl anhand des übergebenen Namen
  • setControl – ersetzt den bestehenden
  • contains – prüft, ob der gegebene FormControl bereits in der FormGroup existiert
  • setValue – setzt den Wert (value) der ganzen FormGroup
  • patchValue – setzt den Wert (value) der ausgewählten FormControls innerhalb der FormGroup
  • reset – setzt den Wert und die Validierungsstatus der FormGroup neu. Alle FormControls und die FormGroup selbst werden als pristine und untouched markiert
  • getRawValue() – liefert das ganze aggregierte Value-Objekt der FormGroup inkl. der disabled-FormControls zurück.

Verwendung von FormGroup

2. FormControl – entspricht einem einzelnen Feld des Formulars und verfolgt den Wert ( value ) und Validierungsstatus ( validation status ).

FormControl interface.

FormControl Verwendung.

3. FormArray – verfolgt den Wert und Validierungsstatus eines Array von FormControls, FormGroups und FormArrays. Der Status eines FormArray wird mit dem reduce-Verfahren berechnet. Wenn ein FormControl innerhalb des FormArray invalid ist, ist das ganze FormArray invalid.

FormArray interface.

FormArray Verwendung.