首页 > 解决方案 > Angular:反应形式是不可变的是什么意思?

问题描述

我目前正在学习 angular& 我正在阅读来自https://angular.io/guide/forms-overview的反应式表单和模板驱动表单之间的差异。该网站称反应式表单是不可变的,而模板驱动的表单是可变的。我真的不明白在这种情况下不可变是什么意思。我的意思是如果用户可以通过向表单控件提供值来更新表单的状态,那不是使表单可变吗?

标签: angular

解决方案


有很多关于 Angular 表单的文章。他们中的大多数只是简单地改写文档并稍微修改示例,而没有实际解释其含义。我不得不多次阅读 Angular 文档以试图理解它们的含义。我假设您熟悉可变性概念。

他们所说的可变/不可变是底层数据模型,而不是表单本身。即使这对我来说也不是 100% 清楚,因为有时他们会谈论表单模型。但关键区别在于,使用Reactive表单,您没有物化模型对象。相反,您有一组 FormControl,您可以通过 API 直接与之交互。在这种情况下,不可变并不意味着您不能更改属性/值。这意味着在基础模型的状态发生更改后,您正在使用该模型的新“实例”,该实例已与新值同步更新,并在任何时间点与 (UI) 控件保持一致。因此,事实的来源是形式模型。值得深入挖掘 Observables 以了解它是如何实现的。

使用模板驱动的表单,您无需访问或修改 FormControl。您在控制器中有视图模型对象和/或属性,它们通过 NgModel 指令链接到 UI。这些对象/属性可能会改变,这就是为什么他们谈论这种形式的可变性。更改检测是异步的,因此即使不太可能,在某个时间点,模板 (UI)、表单模型和视图(数据)模型也可能不对齐。

来自这篇文章“第二个问题是双向绑定数据是可变的,这本质上意味着您不能保证在使用它时不会更改数据。我们永远无法确定如果是什么我们可以看到它是准确的,或者由于双向绑定的异步性质,在我们处理数据时它是否会发生变化。”

希望这可以帮助!


推荐阅读