我正在 Angular 4 上使用表单,我不认识使用NgForm
和FormGroup
处理错误和输入验证器有什么区别。处理表格有什么大区别吗?
如果我没看错的话,你会遇到模板驱动表单和反应式表单之间的区别。
模板驱动的表单就像它的名字一样;模板驱动。大多数(如果不是全部)逻辑都位于模板中。模板驱动表单非常适合不涉及大量复杂逻辑的简单表单。模板驱动的表单
响应式表单采用不同的方法,在模型中定义表单逻辑。反应式表单通常更高级一些,并且在功能和灵活性方面允许相当多的自定义。反应式表单
我的评论非常笼统。有关更多详细信息,请查看响应式与模板驱动表单。这也是一个策略、同步性、测试需求和良好实践的问题(例如:https://www.pluralsight.com/guides/difference-between-template-driven-and-reactive-forms-angular/)
ngForm= 模板驱动 = 异步 = 更难测试 = 控制 在你的模板内 = 一种旧的编码方式 = 里面有一个 FormGroup 类型键("form"键)。
FormGroup =反应式表单 = 同步 = 代码内部的控件并绑定到模板:因此更容易测试 = 更现代的编码方式 = 直接是FormGroup类型的对象。
一般来说,它们也会做同样的事情,但是直接在模板中使用ngForm,您使用的是模板驱动策略。在这种情况下,元素结果是一个具有类型为 FormGroup 的键(键"form)"的对象。然后ngForm内部有一个FormGroup。控件位于模板中。要从另一个位置访问它,您需要访问 DOM 的元素或使用事件传递元素。 另一方面,在 JS/TS 中使用变量 =FormGroup并在模板中绑定该变量,您使用的是响应式表单策略。在这种情况下,变量 IS 直接是 FormGroup 类型的对象。控件不在模板内,但绑定到模板。然后更容易从另一个地方访问
好吧,如果ngForm内部有一个FormGroup,那么我们可以说ngForm更完整吗?不完全是。只是不同的方式有相同的结果。模板驱动将您的值保留在模板上,您需要直接在模板中操作它,或者有更多的工作来在您的 TS 中操作它,例如使用事件(例如如何使用模板驱动与反应式表单在表单中创建自定义验证)。相反,FormGroup 将直接为您提供来自 TS 的所有访问权限,您可以在转到模板之前控制它,或者从另一个代码访问它,而不必从 DOM 获取值 (.getElementById ....)。
那么在我看来,这是一个关于你的需求、你的战略和你正在采用的良好做法的问题。但基本上,它们的创建是为了给你相同的结果。