スポンサーリンク

AngularのリアクティブフォームをFormBuilderで実装する方法

FormBuilderとは?

FormBuilderは、AngularのReactiveFormsModuleの一部で、フォームの作成をシンプルにするためのユーティリティクラスです。フォームを構築する際に、FormGroupやFormControlを使ってフォーム要素を定義する代わりに、FormBuilderを使うことでコード量が減り、メンテナンスしやすくなります。

FormBuilderの利点

  • コードの可読性が向上
  • フォームの初期化が簡潔になる
  • 大規模なフォームを効率的に管理できる

リアクティブフォームの実装

モジュールをインポート

まずは、ReactiveFormsModuleをインポートする必要があります。

@Component({
  selector: 'app-example',
  standalone: true,
  imports: [ReactiveFormsModule],
  templateUrl: './example.component.html',
  styleUrl: './example.component.scss'
})
export class ExampleComponent {

コンポーネントの作成

コンポーネントの作成し、FormBuilderを使って、FormGroupを作成します。

export class ExampleComponent {
  loginForm!: FormGroup;

  constructor(private fb: FormBuilder) {
    this.createForm();
  }

  createForm() {
    this.loginForm = this.fb.group({
      email: [''],
      password: ['']
    });
  }

  onSubmit() {
    if (this.loginForm.valid) {
      console.log(this.loginForm.value);
    }
  }  

}

createForm()の箇所で、FormGroupを作っています。FormBuilderで作成すれば、new FormControlといった記載を省略でき、可読性が上がります。

また、onSubmitの処理も作っておきます。

テンプレートの作成

テンプレートを作成します。

<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
  <div>
    <label for="email">Email:</label>
    <input id="email" formControlName="email" type="email">
  </div>

  <div>
    <label for="password">Password:</label>
    <input id="password" formControlName="password" type="password">
  </div>

  <button type="submit" [disabled]="loginForm.invalid">Login</button>
</form>

実行結果

実行してみると、しっかりとフォームデータを保持していることがわかりました。

まとめ

FormBuilderを使用することで、Angularのリアクティブフォームをより簡潔かつ効率的に定義することができます。フォーム構築の際のコードが減り、特に大規模なフォームや複雑なバリデーションロジックを管理する際に非常に役立ちます。

今回はバリデーションは書きませんでしたが、バリデーションもFormBuliderで記述しやすなるため、効率的なフォーム構築を実現できるでしょう。