ngForm和FormControl之间的差异

时间:2018-01-08 04:20:17

标签: angular typescript ionic2

我正在处理angular4上的表单,并且我不会使用echo node_modules/ > .gitignore NgForm处理错误和输入验证程序来识别差异是什么。处理表格有什么大不同吗?

谢谢!

3 个答案:

答案 0 :(得分:23)

NgForm 做了一些方便但不明显的事情:它在选择器中包含表单标记(而不是要求您明确添加 ngForm 作为属性)。这意味着如果您导入 FormsModule,NgForm 将自动附加到您视图中的任何 标记。这非常有用,但可能令人困惑,因为它发生在幕后。

NgForm 为我们提供了两个重要的功能:

  1. 名为 ngForm
  2. FormGroup
  3. (ngSubmit)输出
  4. 您可以看到我们在视图中的标记中使用了这两个:

    <form #f="ngForm" (ngSubmit)="onSubmit(f.value)"
    

    首先我们有 #f =&#34; ngForm&#34; #v = thing 语法表示我们要为此视图创建局部变量。在这里,我们为 ngForm 创建一个别名,对于此视图,绑定到变量 #f ngForm 首先来自哪里?它来自 NgForm 指令。什么类型的对象是 ngForm ?它是 FormGroup 。这意味着我们可以在视图中使用f作为 FormGroup 。这正是我们在(ngSubmit)输出中所做的。

    我们使用以下语法绑定到表单的ngSubmit操作:(ngSubmit)=&#34; onSubmit(f.value)&#34;

    • (ngSubmit) - 来自 NgForm
    • onSubmit() - 将在我们的组件定义类
    • 中实现
    • f.value - f 是我们在上面指定的 FormGroup .value 将返回此 FormGroup
    • 的键/值对

    有关详情,请参阅此link

答案 1 :(得分:7)

如果我正确读到这一点,那么你就会遇到模板驱动形式和反应形式之间的差异。

模板驱动的表单就像听起来一样;模板驱动。大多数(如果不是全部)逻辑都在模板中。模板驱动的表单非常适用于不涉及大量复杂逻辑的简单表单。 Template Driven Forms

反应表单通过在模型中定义表单逻辑来采用不同的方法。反应表单通常更先进,在功能和灵活性方面允许相当多的自定义。Reactive Forms

答案 2 :(得分:1)

我的评论很笼统。有关更多详细信息,请选中“对模板驱动形式的响应”。这也是一个策略,同步性,测试需求和良好实践的问题(例如,在此处检查:https://www.pluralsight.com/guides/difference-between-template-driven-and-reactive-forms-angular/

ngForm =模板驱动=异步=更加难以测试=控制在您的模板内=一种旧的编码方式=里面有一个FormGroup类型的键(“ form”键)

FormGroup =反应形式=同步=控制将代码和BIND插入模板:因此更易于测试=更现代的编码方式=直接是FormGroup类型的对象。

通常,它们会执行相同的操作,但是直接在模板内使用 ngForm 会使用模板驱动策略。在这种情况下,元素结果是一个具有FormGroup类型的键(键“ form”)的Object。然后ngForm里面有一个FormGroup。 控件在您的模板中。要在另一个地方访问它,您需要访问DOM元素或使用事件传递该元素。 另一方面,在JS / TS中使用变量= FormGroup 并将其绑定到模板中,则使用了反应形式策略。在这种情况下,变量直接是FormGroup类型的对象。 控件不在模板内,而是绑定到模板。然后从另一个地方更容易访问

好吧,如果ngForm里面有一个FormGroup,那么我们可以告诉ngForm更完整吗?不完全是。只是不同的方式具有相同的结果。模板驱动将您的值保留在模板上,您将需要直接在模板内对其进行操作,或者需要做更多工作来在TS中对其进行操作,例如使用事件(例如,如何在其中创建自定义验证)您的表格使用模板驱动与反应式表单)。相反,FormGroup将直接为您提供来自TS的所有访问权限,您可以在转到模板之前进行控制,也可以从其他代码访问它,而不必从DOM(.getElementById ....)获取值。

然后,我认为这是关于您的需求,您的策略和所采用的良好实践的问题。但基本上,它们的创建是为了给您相同的结果。