Wir bieten Schulungen an! Von Anfänger bis Experte - inklusive Agentic AI Coding!
Artikel Header Bild zu Fabelhafte Formulare

Fabelhafte Formulare

Johannes Millan 4 Min. Lesezeit

Einfaches Formular-Handling mit ng-fab-form

Wer schon einmal mit Formularen in einer AngularJS-App gearbeitet hat, kennt das:

  • Nicht validierte Formulare lassen sich absenden.
  • Der bei einigen Nutzern immer noch beliebte Doppelklick auf den Submit-Button führt zum zweimaligen Absenden des Formulars.
  • Fehlermeldungen müssen jedes Mal aufwendig mit Hilfe der Name-Attribute und zusätzlichen Markup neu konfiguriert werden..

Die Chancen stehen gut, dass man sich mehr als einmal dabei erwischt, etwas vergessen zu haben. Im Besten Fall leidet die Nutzererfahrung, im schlimmsten Fall führen die doppelt oder falsch abgesendeten Daten zu schwer nachvollziehbaren Fehlern.

Die Tools, um das Formular-Handling nach den Vorstellungen anzupassen, sind zwar alle vorhanden, aber die Benutzung gestaltet sich gefühlt durchaus aufwendig. Das Modul ng-fab-form versucht dieses Problem anzugehen, indem es eine globale Konfiguration von Formularen innerhalb eurer App erlaubt.

So sieht es aus:

Installation und Verwendung

Um ng-fab-form zu benutzen müsst ihr es nur installieren und in eurem app-Modul laden (Achtung, AngularJS 1.3 wird aufgrund der Abhängigkeit zu ngMessages benötigt):

Die Installation erfolgt, wie gewohnt, über Bower:

bower install ng-fab-form --save

Anschließend müssen ngFabForm und ngMessages in eurem App-Modul geladen werden.

angular.module("yourApp", ["ngFabForm", "ngMessages"]);

Benutzung der Validierung am Beispiel eines Eingabefeldes

Um die Validierung zu verwenden müssen zwei Vorraussetzungen erfüllt sein.

  1. Muss sich eurer input-Feld innerhalb eines eines form-Elements befinden
  2. Muss ng-model verwendet werden:
  3. Eine mit ng-model kompatible Validierungs-Direktive, wie etwa required, ng-pattern oder maxlength muss gesetzt sein.
<form name="yourFormName" ng-submit="someSubmitFn()">
  <input type="text" ng-model="a.model.here" required />
  <button type="submit">Send me!</button>
</form>

Dieses html wird, wenn man die default-Einstellungen verwendet, automatisch in folgendes transformiert:

<form name="yourFormName" ng-submit="someSubmitFn()">
  <input
    type="text"
    ng-model="aModelHere"
    name="yourFormName_a_model_here"
    required
  />
  <div>
    <div ng-messages="field.$error">
      <ul
        class="list-unstyled validation-errors"
        ng-show="field.$invalid && (field.$touched || field.$dirty || form.$triedSubmit)"
      >
        <li ng-message="required">This field is required</li>
        <!-- other messages -->
      </ul>
      <div
        class="validation-success"
        ng-show="field.$valid && !field.$invalid"
      ></div>
    </div>
    <div
      class="validation-success"
      ng-show="field.$valid  && !field.$invalid"
    ></div>
  </div>
  <button type="submit">Send me!</button>
</form>

Doppelte Submits und das Absenden von invaliden Formularen werden dabei entsprechend eurer Einstellungen automatisch gehandelt.

Was ng-fab-form anders macht als andere Form-Module

💡 Keine Lust zu lesen?

Nicht jeder lernt am besten aus Büchern und Artikeln. Lernen darf interaktiv sein und Spaß machen. Wir bieten dir auch Angular Intensiv-Schulungen an, damit du tiefer in die Thematik einsteigen kannst.

Mehr Informationen zur Angular-Schulung
Teilnehmer:innen in der Veranstaltung Angular-Intensiv-Workshop

Die große Anzahl von Modulen, die sich einem vereinfachten Form-Handling widmen, zeigt, dass die Probleme mit Formularen in Angular nicht ganz neu sind. Im wesentlichen gibt es dabei bisher zwei Arten von Modulen (auf weitere Beispiele könnt Ihr gerne in den Kommentaren verweisen): Form-Builder und Validation-Helper. Erstere sind dabei häufig recht unflexibel, da Sie vom Markup abstrahieren und dieses automatisch nach bestimmten Regeln generieren. Letztere erfordern normalerweise das Verwenden von bestimmten Direktiven, die zwar einfacher zu verwenden sind als das Standard-Markup, aber für gewöhnlich trotzdem immer wieder neu aufgerufen werden müssen.

ng-fab-form hingegen ist demgegenüber kein Form-Builder oder Framework und es erfordert - evtl. abgesehen von einer einmaligen Anpassung der Konfiguration - kein zusätzliches Markup. Das Modul lädt dabei mit einer Reihe sinnvoller Default-Einstellungen, lässt sich aber bei Bedarf umfassend konfigurieren und anpassen, auch für etwaitige Ausnahmefälle. Die vorhandenen Möglichkeiten sprengen hier leider den Rahmen. Eine gute Übersicht findet sich allerdings auf der github-Seite.

Weitere Features

Neben den bereits angesprochenen Funktionen gibt eine Reihe von weiteren vollständig konfigurierbaren Features:

💡 Hat dir das Tutorial geholfen?

Wir bieten auch Angular-Intensiv-Schulungen an, um dich möglichst effektiv in das Thema Angular zu begleiten. Im Kurs kannst Du die Fragen stellen, die Du nur schlecht googeln kannst, z.B. "Besserer Weg, um meine Applikation zu strukturieren?". Wir können sie Dir beantworten.

Jetzt weiter lernen
Teilnehmer:innen der Veranstaltung Angular-Intensiv-Workshop
  • Einfache Implementierung eigener Validierungs-Nachrichten, sowie eine Vorlage für eigene Themes
  • Direktive zum Deaktivieren ganzer Formulare
  • Auto-Scroll-To & Fokus des ersten nicht erfolgreich validierten Feldes beim Absenden des Formulars
  • Eine Direktive zur Einbindung von kontext-spezifischen Validierungs-Nachrichten z.B. für ngPattern.
  • Automatisches triggern von $setDirty für alle Formularfelder bei einem versuchten Submit
  • Automatisches setzen des novalidate-Atributes für Formulare

Eine vollständige Übersicht findet sich ebenfalls auf der github-Seite.

Weitere Artikel

Migration AngularJS zu Angular
angularjs angular
Jonathan Schneider •

Migration AngularJS zu Angular

Migration mit ngUpgrade leichtgemacht. Eine Zusammenfassung über alle wichtigen Schritte, wie ihr eure AngularJS App zu einer Angular App migrieren könnt.

Migration AngularJS zu Angular [Video]
angularjs angular
Robin Böhm •

Migration AngularJS zu Angular [Video]

Angular Version >2.x kommt … und es macht alles anders! Ist das wirklich so? Was hat das für meine Anwendung zu bedeuten? Mehr darüber in diesem Artikel!

Newsletter

Bleibe auf dem Laufenden mit den neuesten Angular News, Tutorials und Schulungsangeboten.

Newsletter abonnieren