我已经关注模板表单的官方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
函数将属性name
和power
设置为空字符串。但是,由于执行此函数后,我们也重置了表单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
?
答案 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
来覆盖此行为。