[解決済み] FormGroupとFormArrayの使い分けは?
2022-10-03 23:53:33
質問
フォームグループ :
A フォームグループ は、各子フォームコントロールの値を集約して1つの オブジェクトに集約し、各コントロールの名前をキーとします。
const form = new FormGroup({
first: new FormControl('Nancy', Validators.minLength(2)),
last: new FormControl('Drew')
});
フォームアレー :
A FormArray は、各子フォームコントロールの値を集約して 配列に集約します。
const arr = new FormArray([
new FormControl('Nancy', Validators.minLength(2)),
new FormControl('Drew')
]);
どのような場合にどちらを使うべきでしょうか?
どのように解決するのですか?
FormArray は FormGroup の亜種です。主な違いは、そのデータが配列としてシリアライズされることです (FormGroup の場合はオブジェクトとしてシリアライズされるのとは対照的です)。これは、動的なフォームのように、グループ内にいくつのコントロールが存在するかわからない場合に特に便利です。
簡単な例で説明しましょう。例えば、ピザの注文を受けるフォームがあるとします。そして、特別な要望を追加したり削除したりするためのボタンを配置します。以下はコンポーネントのhtml部分です。
<section>
<p>Any special requests?</p>
<ul formArrayName="specialRequests">
<li *ngFor="let item of orderForm.controls.specialRequests.controls; let i = index">
<input type="text" formControlName="{{i}}">
<button type="button" title="Remove Request" (click)="onRemoveSpecialRequest(i)">Remove</button>
</li>
</ul>
<button type="button" (click)="onAddSpecialRequest()">
Add a Request
</button>
</section>
そして、これが特別なリクエストを定義し、処理するコンポーネントクラスです。
constructor () {
this.orderForm = new FormGroup({
firstName: new FormControl('Nancy', Validators.minLength(2)),
lastName: new FormControl('Drew'),
specialRequests: new FormArray([
new FormControl(null)
])
});
}
onSubmitForm () {
console.log(this.orderForm.value);
}
onAddSpecialRequest () {
this.orderForm.controls
.specialRequests.push(new FormControl(null));
}
onRemoveSpecialRequest (index) {
this.orderForm.controls['specialRequests'].removeAt(index);
}
FormArray は FormGroup よりも柔軟性があり、FormGroup の "addControl", "removeControl" などを使うよりも "push", "insert", "removeAt" などを使う方が簡単に FormControls を操作することができます。FormArray メソッドは、コントロールがフォームの階層で適切に追跡されることを保証します。
は、これが役立つことを願っています。
関連
-
[解決済み] formGroup' は 'form' の既知のプロパティではないため、バインドできません。
-
[解決済み] ng buildの後にangular-cliのdist-folderのパスを変更するには?
-
[解決済み] 別のプロセス(id #######)が現在 ngcc を実行しています。
-
[解決済み] Angular2でNgForがPipeでデータを更新しない。
-
[解決済み] AngularでEventEmitterに2つのパラメータを渡すには?
-
[解決済み] プロパティ 'X' はプライベートであり、クラス 'xyzComponent' 内でのみアクセス可能です。
-
[解決済み] Angular CLIで特定のバージョンのAngularをインストールするには?
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] 新しいangularプロジェクトを作成する際に依存関係ツリーエラーを解決できない
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ng serve がファイルの変更を自動的に検出しない
-
[解決済み] 別のプロセス(id #######)が現在 ngcc を実行しています。
-
[解決済み] Angular 2のFormGroupからすべての検証エラーを取得する
-
[解決済み] 継承と依存性注入
-
[解決済み] 簡単なパイプで小数点以下2桁に制限する
-
[解決済み] タイプスクリプト タイプ X はタイプ Y の length、pop、push、concat、その他 26 のプロパティが欠落しています。[2740]
-
[解決済み] Angular / Angular Materialでmat-horizontal-stepperのステップをプログラムで移動させることは可能ですか?
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] angularで「タイプ 'EventEmitter' は一般的ではありません」ERROR。