4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Angular Reactive Forms

Last updated at Posted at 2019-07-26

ReactiveForms(モデル駆動型)とは

公式ドキュメントには以下のように記されています。

リアクティブフォーム は、時間とともに入力値が変わるフォームを扱うためのモデル駆動なアプローチを提供します。このガイドでは、シンプルなフォームコントロールの作成と更新から、グループ内の複数コントロールの使用、フォームのバリデーション、高度なフォームの実装の方法を説明します。

でも最初は「ちょっと何言っているかわかりません」状態なので、順を追って説明していきます。

まず、Angularのフォームには2種類あります。

テンプレート駆動型(Template Driven Forms)

  • 簡単なコードで、基本的なバリデーションを実装できる。
  • テンプレート側でオブジェクトの生成から検証までを行う。
  • 非同期的
  • テストが複雑

モデル駆動型(Reactive Forms)

  • 複雑で柔軟な要件に対応することができるフォーム
  • モデル側でオブジェクトの生成、検証を行い、テンプレート側では紐付けを行うのみ。
  • 同期的
  • テストが簡単

ReactiveFormsの良いところ

  • 複雑で柔軟な要件に対応することができるフォーム
    • テンプレート駆動型と比べると、少しコード量は多いですが、あらゆる要件に対応することができます。
  • モデル側でオブジェクトの生成、検証を行い、テンプレート側では紐付けを行うのみ。
    • ほとんどのコードはモデル側で行うため、htmlはシンプルになります。
  • 同期的
    • 全てのコントロールが常に利用可能のため、簡単に親子フォーム間で値の更新が可能です。
  • テストが簡単
    • リクエストのデータには一貫性があり予測性が保証されているためです。

まとめ

Reactive Forms, Template Driven Forms はうまく使い分けて、実装できれば良いと思います。

  • Template Driven Formsは比較的に理解しやすいので、初学者に良いと思います。また、簡単なバリデーションチェックなどを行いたい時は素早く実装できるためおすすめです。

  • Reactive Formsは複雑なバリデーションを自ら作成する必要がある時に良いです。ただ、少し複雑になるのでこの方のように自分なりの簡略化をする工夫をしたら良いと思いました。

また後日、ここに実装編の記事を追加しておきます。

参照

https://qiita.com/mixplace/items/79023cb35668603e5c7b
https://qiita.com/lacolaco/items/fd7cd09282c528ada2d2
https://angular.jp/guide/forms
https://qiita.com/shirokuman/items/d06531e8ee111a8c74de
https://qiita.com/minase_tetsuya/items/84c3df4ad40f39d290cf
https://qiita.com/hedrall/items/b5dc7ec2cd1c635aeaa2
https://qiita.com/mixplace/items/79023cb35668603e5c7b

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?