テンプレート駆動型と反応型の実際的な違いは何ですか?


157

私はAngular2の新しいフォームAPIについて読んでいますが、フォームには2つのアプローチがあるようです。1つはテンプレート駆動フォームで、もう1つは反応フォームまたはモデル駆動フォームです。

(明らかに)構文の違いではなく、2つの実際的な使用方法の違いを知りたいのですが、実際の使用方法と、さまざまなシナリオでどちらのアプローチがよりメリットがあるかを知りたいと思います。また、どちらか一方を選択するとパフォーマンスが向上しますか?そして、もしそうなら、なぜですか?


3
考慮すべきもう1つの点は、リアクティブフォームは同期であり、テンプレートドリブンフォームは非同期であることです。どちらのフォームにも独自の弱点と長所があるため、アプリケーションで使用するフォームを選択する前に、いくつかのことを検討する必要があります。アプリケーションの複雑さなど。アプリケーションで両方のフォームを使用することもできます。
Vijay Singh

回答:


171

テンプレート駆動フォームの機能

  • 使いやすい
  • 単純なシナリオに適し、複雑なシナリオでは失敗する
  • AngularJSに似ています
  • 双方向データバインディング([(NgModel)]構文を使用)
  • 最小限のコンポーネントコード
  • フォームとそのデータの自動追跡(Angularが処理)
  • 単体テストは別の課題です

リアクティブフォームの機能

  • より柔軟ですが、多くの練習が必要です
  • 複雑なシナリオに対応
  • データバインディングは行われません(ほとんどの開発者が好む不変データモデル)
  • より多くのコンポーネントコードと少ないHTMLマークアップ
  • 次のような反応的な変換を可能にすることができます
    • デバウンス時間に基づくイベントの処理
    • 変更されるまでコンポーネントが異なる場合のイベントの処理
    • 要素を動的に追加する
  • 簡単な単体テスト

1
単体テストのマイナス面は、テンプレート駆動フォームに引き続き適用できますか?
–danger89

@ danger89そうだと思います。ユニットテストがテンプレートドリブンフォームの問題である理由は、それらが値の変更であり、有効性チェックが非同期であるため、ユニットテストに関して頭痛の種となる可能性があるためです。
Alex Lockwood

2
上記のミックスにフォーム検証を追加します。テンプレートは、リアクティブが機能別であるディレクティブを介して検証されます
Kieran

11
反応フォームに言及する場合、「複雑なシナリオを処理する」とはどういう意味ですか?AngularJSから来て、私は複雑なフォームをうまく構築したので、テンプレート駆動型フォームがどのように「複雑なシナリオで失敗する」かを確認するのは難しい
jtate

@jtate私はあなたに同意しますjtate、パフォーマンス、読み込み時間などを改善するのに役立つアイデアは誰にもありますか?
ジョエルジョセフ

24

コード戦略ユーザーエクスペリエンスについての議論だと思います。

要約すると、より操作しやすいテンプレート駆動型アプローチから、より制御高めるための反応型(モデル駆動型アプローチ)に変更し、HTML間のデカップリング(設計/ CSSチームはここで作業できます)とコンポーネントのビジネスルール(angular / jsスペシャリストメンバー)、および反応型変換、相関検証などの機能でユーザーエクスペリエンス改善し、ランタイム検証ルールおよび動的フィールドの複製として複雑なシナリオ処理できます。

この記事はそれについての良いリファレンスです: Angular 2 Forms-テンプレート駆動型とモデル駆動型アプローチ


24

これは、DeborahK(Deborah Kurata)によって説明されたテンプレート駆動型と反応型の比較の要約です。 ここに画像の説明を入力してください


3

反応フォーム:

  • 再利用可能、
  • より堅牢、
  • テスト可能、
  • よりスケーラブル

テンプレート駆動型フォーム:

  • 追加が簡単、
  • スケーラビリティが低い
  • 基本的なフォームの要件

要約では、フォームがアプリにとって非常に重要である場合、またはアプリでリアクティブパターンが使用されている場合は、リアクティブフォームを使用する必要があります。それ以外の場合、アプリには、サインインなどのフォームに関する基本的かつ単純な要件があるため、テンプレート駆動型フォームを使用する必要があります。

角度のある公式リンクがあります


0

反応型フォームとテンプレート駆動型フォームの違いを知る最も簡単な方法

より多くの制御とスケーラビリティが必要な場合は、リアクティブフォームを使用できます

ここに画像の説明を入力してください


0

テンプレート駆動型フォーム:

FormsModuleを使用してインポート

ngModelディレクティブで構築されたフォームは、DOMの存在を必要とするため、エンドツーエンドテストでのみテストできます

フォーム値は、2つの異なる場所で使用できます。ビューモデル、つまりngModel

フォームの検証。フィールドに検証タグを追加するか、複雑なフィールド間検証の追加を開始すると、フォームの可読性が低下します。

反応フォーム:

一般的に大規模アプリケーションに使用できます

複雑な検証ロジックは実際には実装が簡単です

ReactiveFormsModuleを使用してインポート

フォームの値は、ビューモデルとFormGroupの2つの異なる場所で使用できます。

ユニットテストが簡単:クラスをインスタンス化し、フォームコントロールにいくつかの値を設定して、フォームのグローバル有効状態と各コントロールの有効状態に対してアサーションを実行するだけで、これを実行できます。

リアクティブプログラミングのためのオブザーバブルの使用

例:パスワードフィールドとパスワード確認フィールドは同一である必要があります

反応的な方法:関数を作成してFormControlにプラグインするだけです

テンプレート駆動型:ディレクティブを定義し、何とかして2つのフィールドの値を渡す必要があります

https://blog.angular-university.io/introduction-to-angular-2-forms-template-driven-vs-model-driven/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.