Angular2模板表单 - 试图理解重置函数

时间:2017-03-21 18:18:26

标签: javascript angular

我已经关注模板表单的官方Angular2教程,并且我有一些问题需要了解本地reset JavaScript函数对Angular2 ngModel的作用。虽然官方文档中没有明确说明,但我认为reset将输入值设置为默认值null

所以看起来,因为在这个例子中,我们有一个newHero函数:

newHero() {
    this.model = new Hero(42, '', '');
}

当我们"重置"表单,此函数被调用:

<button type="button" class="btn btn-default" (click)="newHero(); heroForm.reset()">
    New Hero (official)
</button>

请注意newHero函数将属​​性namepower设置为空字符串。但是,由于执行此函数后,我们也重置了表单heroForm.reset(),新对象如下:

{ "id": 42, "name": null, "power": null, "alterEgo": null }

这很有意思,不是吗?由于null不等于空字符串(Difference between null and empty string),我可以声称这是错误的。但它在官方的Angular2文档中,所以我不确定 - 我没有做到这一点吗?

我改变了调用内容的顺序:

 <button type="button" class="btn btn-default" (click)="heroForm.reset(); newHero()">
    New Hero (alt)
</button>

这实际上产生了正确的对象,即:{ "id": 42, "name": "", "power": "" }

现在想象一下,如果新对象存在默认值,请说name更改为Jessica Alba。 Angular的官方示例会将此值覆盖为null,因此它提出了一个问题,即使有一个函数来重置模型呢?

此处的项目包含2个重置按钮,正式和备用按钮(请注意顶部的model JSON):https://plnkr.co/edit/1w2SSv8qxpOCjfDaJxPz?p=preview

所以我的问题是:文档中的示例是错误的,还是我遗漏了什么? reset函数是否实际将值更改为null

1 个答案:

答案 0 :(得分:0)

如果您查看Angular源代码,您会看到在reset()实例上调用NgForm然后调用NgForm#resetForm(value: any = undefined),然后调用FormGroup#reset(记录在案) here):

  

重置FormGroup。这意味着默认情况下:

     
      
  • 该组及所有后代都标记为原始
  •   
  • 该组及所有后代未标记
  •   
  • 所有后代的值将为null或null maps
  •   
     

您还可以通过传入状态映射来重置为特定的表单状态      匹配表单的结构,控件名称为键。

所以是的,默认情况下,在reset()上调用NgForm会将值重置为null,而不管null是否真的是规范的“初始值”根据您的应用。但是,您可以通过使用resetForm(value)值的地图调用control name : initial value来覆盖此行为。