9

谁能解释我为什么需要使用它们?

在哪些情况下,与 FormsModule 相比,Reactive Forms 让我的生活更简单更好?

4

2 回答 2

16

基本上,FormsModule如果您有非常简单的要求,就足够了。我的第一个表格都是FormsModule. 如果您只需要将表单输入绑定到模型属性,它们就很棒。

ReactiveFormsModule第一次设置时会比较痛苦,但它们会给你更多的控制权。因为您在组件中创建表单元素,所以您可以轻松地执行以下操作:

  • 在任何时候读/写输入的值(甚至在构建视图之前)
  • 定义高级验证规则,包括异步验证器(例如:在用户填写注册表的其余部分时,检查服务器输入的用户名是否可用)
  • 当值发生变化时得到通知并立即做出反应
  • 访问原生 HTML 表单元素
  • 重置表格...
  • 如果您关心单元测试(优秀的编码人员应该),那么响应式表单更容易测试,因为它们可以被命令式地操作。使用FormsModule,仅在单元测试中获取对表单实例的引用是一件很痛苦的事情。

自从我切换后,我没有回到FormsModule. 查看文档

Angular 反应式表单促进了一种反应式编程风格,有利于显式管理在非 UI 数据模型(通常从服务器检索)和面向 UI 的表单模型(保留屏幕上 HTML 控件的状态和值)之间流动的数据. 反应式表单提供了使用反应式模式、测试和验证的便利性。

使用响应式表单,您可以使用本指南中描述的技术在组件类中创建 Angular 表单控件对象树,并将它们绑定到组件模板中的原生表单控件元素。

您可以直接在组件类中创建和操作表单控件对象。由于组件类可以立即访问数据模型和表单控件结构,因此您可以将数据模型值推送到表单控件中并将用户更改的值拉回。组件可以观察表单控件状态的变化并对这些变化做出反应。

于 2017-07-22T15:01:00.043 回答
1

根据您的需要,反应式表单和表单模块都是完全可以接受的。在反应式表单(模型驱动表单)中,您可以在组件上定义字段和验证,并将它们连接到您的 html 模板。它需要额外的代码,但它有一些好处。

例如,您可以根据代码中的决策更动态地构建表单和验证。

另一个很大的好处是它使您的所有验证逻辑单元可测试

于 2017-07-22T13:51:27.637 回答