用表单处理用户输入是许多常见应用的基础功能。
共同点:
共享底层构造块。
FormControl,FormGroup,FormArray,ControlValueAccessory。
主要区别:
他们在如何处理和管理表单以及表单数据的工作方式不同。
在响应式表单中,视图中的每个表单元素都直接链接到一个表单模型FormControl Instance。
在模板驱动表单中,每个表单元素都链接到一个指令上,该指令负责管理其内部表单模型。
响应式:
响应式表单通过对数据模型的同步访问提供了更多的可预测性,使用 Observable 的操作符提供了不可变性,并且通过 Observable 流提供了变化追踪功能。它们的可扩展性、可复用性和可测试性更强。
显式,在组件类中创建。
模板式:
模板驱动表单在往应用中添加简单的表单时更加适用,他们添加起来很容易,但是不利于扩展。如果表单是非常基础的需求以及简单的逻辑,适用模板式会是不错的选择。
隐式,由组件创建。
表单验证的不同:
响应式表单把自定义验证器定义成函数,它以要验证的控件作为参数。
模板驱动表单和模板指令紧密相关,并且必须提供包装了验证函数的自定义验证器指令。
选择一项策略首先要了解所提供选项的优缺点。当选择在 Angular 中构建表单要用哪种基础设施时,底层 API 访问、表单模型访问、可预测性、可变性、直截了当的验证方式和测试策略以及可伸缩性都是重要的考虑因素。 模板驱动表单和 AngularJS 中的传统模式相似,但它们具有局限性。响应式表单已经和 Angular 架构其它区域中存在的响应式模式相整合,并很好地弥补了这些需求,这些限制通过响应式表单技术得到了缓解。