Angularでフォームを動的に生成する方法
Angularでは、動的フォーム生成機能を利用して動的にフォームを生成できます。この動的フォーム生成には、AngularのReactive FormsまたはTemplate-driven Formsを使用できます。
動的フォームを構築するためのReactive Formsを使用する:
- まず、コンポーネント内に必要なモジュールとサービスをインポートします。
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
- 次に、FormGroupを作成します。
formGroup: FormGroup;
- コンポーネントのコンストラクタでFormBuilderサービスをインジェクトし、それを使用してフォームグループを作成する。
constructor(private formBuilder: FormBuilder) { }
- ngOnInitメソッドで、FormBuilderを使用してフォームコントロールを作成する。
ngOnInit() {
this.formGroup = this.formBuilder.group({});
}
- ニーズに応じて、formBuilder には form コントロールを追加するためのメソッドがいくつか用意されています。たとえば次のとおりです。
this.formGroup.addControl('fieldName', this.formBuilder.control('', Validators.required));
- HTMLテンプレートで、formGroupディレクティブを使用してフォームグループをバインドする:
<form [formGroup]="formGroup">
<!-- 添加动态生成的表单控件 -->
</form>
テンプレート主導型のフォームを用いて動的なフォームを作成する:
- はじめにコンポーネントで必要なモジュールをインポートします。
import { Component } from '@angular/core';
- ニーズに応じて、フォームのデータを入れるためのデータモデルを作成する。
dataModel: any = {};
- HTMLテンプレートではngModelディレクティブを使用して、データバインディングを行います。
<input type="text" [(ngModel)]="dataModel.fieldName" name="fieldName" required>
- ngIf ディレクティブを利用することで、必要に応じてフォームコントロールの表示を動的に制御できます。
<div *ngIf="showField">
<input type="text" [(ngModel)]="dataModel.fieldName" name="fieldName" required>
</div>
Template-driven Form を使用する場合は、追加で FormsModule モジュールが必要であることに注意してください。
こちらはAngularのReactive Formsとテンプレート駆動フォームを利用して、動的にフォームを生成するための簡単な例です。実際の要件に応じて、検証ルール、カスタムコントロールなどの機能を追加できます。