写真[1]-角度信号フォームのチュートリアル (v22) Windows 7、8、10、11 の場合 - Winpcsoft.com
角度波形のチュートリアル (v22)

Angular でフォームを作成した場合, 二つの古い道を知っている. テンプレート駆動型のフォームは高速です, ただし搭載されている種類は少ない. リアクティブフォームは強力です, しかし、多くの儀式を持ち込んでください: フォームコントロール-, フォームグループ- および valueChanges サブスクリプション, どこで考えなければいけないのか, ログアウトする, そして毎回 ControlValueAccessor, あなたが望むなら, カスタム入力がうまく機能すること.

信号形式, Angular v22 での安定化, 別のルートを取る. フォームのステータスを単純なシグナルとして定義します, それを形で囲む() テンプレートにフィールドを含めます [フォームフィールド]. 有効, 間違い, タッチされたステータスと値はすべてシグナルとして返されます, あなたと一緒に () 読む. 購読なし, ControlValueAccess がありません, モデルからの完全な型推論.

このチュートリアルでは、全体を端から端まで説明します。. 実際のチェックアウトフォームを作成します, 組み込みバリデーターとカスタムバリデーターを追加する, 無効の場合は無効にするボタンを使用して送信をリンクし、ネストされたグループと配列フィールドをカバーします. ここのすべてのスニペットは @angular/core に基づいています 22.0.0 およびこの本の付属のコード リポジトリ. 見せてあげるよ, どのように調和するか.

より包括的な v22 イメージが最初に必要な場合, 読む Angular v22 の新機能?. この記事はフォームについてです.

ライブデモ: この投稿のすべての抜粋は、 インタラクティブな Signalformen デモセットアップは必要ありません.

Angular v22 の Signal Forms API とは何ですか?

シグナルフォームは @angular/forms/signals にあります (古典的な @angular/forms とは別のエントリ ポイント). コアピース, 最も頻繁に使用するもの:

メンタルモデル: 信号にはデータが含まれています, 形状() それらをリアクティブフィールドツリーにパッケージ化し、各フィールドが独自の信号を提供します。. モデルは唯一の真実の情報源であり、フォームは双方向でモデルと同期したままになります。.

ステップ 1: 形状ステータスを信号として定義

単純な書き込み可能な信号から始める, フォームの形状を表すもの. ここに入力したタイプはフォーム全体に流れます, そのため、オートコンプリートとコンパイルエラーが無料で発生します.

輸入 { 信号 } from '@angular/core';
フォームモデル = 信号({
方法: '',
額: 100,
});

これは「モデル」レベル全体です. フォームグループがありません, ネストされたビルダー呼び出しはまだありません, 信号内の単なるオブジェクトリテラル.

ステップ 2: フォームでフォームを作成する()

モデルをフォームで包みます() ある. 2 番目の引数はスキーマ コールバックです。, モデル内の型指定されたパスに基づいて検証を宣言する場所.

輸入 { 成分, 信号, 注入する } from '@angular/core';
輸入 { 形状, フォームフィールド, 必須 } from '@angular/forms/signals';
@成分({
セレクタ: 'app-checkout-form',
輸入品: [フォームフィールド],
テンプレート: 「...」,
})
エクスポートクラス CheckoutFormComponent {
フォームモデル = 信号({ 方法: '', 額: 100 });
  checkoutForm = フォーム(this.formModel, (スキーマ) => {
必須(スキーマ.メソッド, { メッセージ: 'Please select a payment method.' });
必須(スキーマ.量, { メッセージ: 'Amount is required.' });
});
}

schema.method と schema.amount は型指定されたパスです, 文字列なし. フィールド名を入力すると, ビルドが失敗する. required は、メッセージを含むオプションの構成オブジェクトを受け取ります, それはまさにそれです, 後でユーザーに表示するもの.

checkoutForm がフィールド ツリーになりました. checkoutFormを使用してフォーム全体のステータスを確認できます() checkoutForm.method を使用した個々のフィールド.

ステップ 3: フィールドのリンク先 [フォームフィールド]

テンプレートで、各コントロールを [フォームフィールド] 指令, 対応するフィールドを指します. これにより、値のバインディングとステータスの更新が両方向で行われるようになります。, 基礎となる信号が最新の状態に保たれるようにする, ユーザーが何かを入力または選択している間.

<形状 (提出する)="onSubmit(); $イベント.preventDefault()">
<label for="payment-method">支払い方法を選択してください</ラベル>
<select id="payment-method" [フォームフィールド]="checkoutForm.method">
<option value="">方法を選択してください...</オプション>
<option value="credit">クレジットカード</オプション>
<option value="paypal">ペイパル</オプション>
</選択する>
  <label for="amount">額 ($)</ラベル>
<input id="amount" type="number" [フォームフィールド]="checkoutForm.amount" />
  <button type="submit" [無効]="checkoutForm().無効()">
支払う {{ checkoutForm.amount().価値() | 通貨 }}
</ボタン>
</形状>

いくつかのこと, 考慮する必要があること:

  • [フォームフィールド]="checkoutForm.method" ネイティブを結びつける
    ニュースを検索
テーマのドキュメント