image[1]-Tutoriel sur les formes de signaux angulaires (v22) Pour Windows 7,8,10,11-Winpcsoft.com
Tutoriel sur les formes d'onde d'angle (v22)

Si vous avez créé des formulaires en Angular, connais les deux vieux chemins. Les formulaires basés sur des modèles sont rapides, aber mit wenigen Typen ausgestattet. Reaktive Formulare sind leistungsstark, bringen aber eine Menge Zeremonien mit sich: FormControl-, FormGroup- und valueChanges-Abonnements, bei denen Sie daran denken müssen, sich abzumelden, und jedes Mal einen ControlValueAccessor, wenn Sie möchten, dass eine benutzerdefinierte Eingabe gut funktioniert.

Formes de signaux, stabil in Angular v22, geht einen anderen Weg. Sie definieren Ihren Formularstatus als einfaches Signal, umschließen ihn mit form() und binden Felder in der Vorlage mit [formField]. Gültigkeit, Fehler, berührter Status und Werte werden alle als Signale zurückgegeben, die Sie mit () lesen. Keine Abonnements, kein ControlValueAccessor, vollständige Typinferenz aus Ihrem Modell.

Dieses Tutorial führt das Ganze von Ende zu Ende durch. Wir erstellen ein echtes Checkout-Formular, fügen integrierte und benutzerdefinierte Validatoren hinzu, verknüpfen das Senden mit einer Schaltfläche zum Deaktivieren bei Ungültigkeit und decken dann verschachtelte Gruppen und Array-Felder ab. Jedes Snippet hier wird anhand von @angular/core 22.0.0 und dem Begleitcode-Repo für das Buch überprüft. Ich zeige Ihnen, wie es zusammenpasst.

Wenn Sie zuerst das umfassendere v22-Bild wünschen, lesen Sie Was ist neu in Angular v22?. Dieser Artikel befasst sich mit Formularen.

Live-Demo: Jeder Ausschnitt in diesem Beitrag läuft in der interaktive Signalformen-Demokeine Einrichtung erforderlich.

Was ist die Signal Forms API in Angular v22?

Signalformen leben in @angular/forms/signals (ein separater Einstiegspunkt vom klassischen @angular/forms). Die Kernstücke, die Sie am häufigsten verwenden werden:

Das mentale Modell: Ihr Signal enthält die Daten, form() verpackt sie in einen reaktiven Feldbaum und jedes Feld stellt seine eigenen Signale bereit. Das Modell ist die einzige Quelle der Wahrheit und die Form bleibt in beide Richtungen damit synchronisiert.

Schritt 1: Formstatus als Signal definieren

Beginnen Sie mit einem einfachen beschreibbaren Signal, das die Form Ihres Formulars beschreibt. Die hier eingegebenen Typen fließen durch das gesamte Formular, sodass Sie kostenlos Autovervollständigung und Kompilierungsfehler erhalten.

import { signal } from '@angular/core';
formModel = signal({
méthode: '',
amount: 100,
});

Das ist die gesamte „Modell“-Ebene. Keine FormGroup, noch keine verschachtelten Builder-Aufrufe, nur ein Objektliteral innerhalb eines Signals.

Schritt 2: Erstellen Sie das Formular mit form()

Wickeln Sie das Modell mit form() ein. Das zweite Argument ist ein Schema-Rückruf, bei dem Sie die Validierung anhand typisierter Pfade im Modell deklarieren.

import { Component, signal, inject } from '@angular/core';
import { form, FormField, required } from '@angular/forms/signals';
@Component({
selector: 'app-checkout-form',
imports: [FormField],
template: `...`,
})
export class CheckoutFormComponent {
formModel = signal({ méthode: '', amount: 100 });
  checkoutForm = form(this.formModel, (schema) => {
required(schema.method, { message: 'Please select a payment method.' });
required(schema.amount, { message: 'Amount is required.' });
});
}

schema.method und schema.amount sind typisierte Pfade, keine Zeichenfolgen. Wenn Sie einen Feldnamen eingeben, schlägt der Build fehl. erforderlich nimmt ein optionales Konfigurationsobjekt mit einer Nachricht, die genau das ist, was Sie dem Benutzer später anzeigen.

checkoutForm ist jetzt ein Feldbaum. Sie können den Status des gesamten Formulars mit checkoutForm() und einzelner Felder mit checkoutForm.method lesen.

Schritt 3: Felder verknüpfen mit [formField]

Binden Sie in der Vorlage jedes Steuerelement mit dem [formField] Direktive, die auf das entsprechende Feld zeigt. Dadurch werden Wertbindungen und Statusaktualisierungen in beide Richtungen durchgeführt, sodass das zugrunde liegende Signal aktuell bleibt, während der Benutzer etwas eingibt oder auswählt.

<form (submit)="onSubmit(); $event.preventDefault()">
<label for="payment-method">Select Payment Method</label>
<select id="payment-method" [formField]="checkoutForm.method">
<option value="">Choose a method...</option>
<option value="credit">Credit Card</option>
<option value="paypal">PayPal</option>
</sélectionner>
  <label for="amount">Amount ($)</label>
<input id="amount" type="number" [formField]="checkoutForm.amount" />
  <button type="submit" [disabled]="checkoutForm().invalid()">
Pay {{ checkoutForm.amount().value() | currency }}
</bouton>
</form>

Ein paar Dinge, die es zu beachten gilt:

  • [formField]="checkoutForm.method" bindet ein natives
    Rechercher des actualités
documentation du thème