【发布时间】:2017-03-21 18:18:26
【问题描述】:
我已经按照模板表单的官方 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?
【问题讨论】:
-
我认为你想太多教程了。目的是帮助您开始使用 Angular 2。一旦您对框架感到满意,您就可以根据需要设置对象。例如,为新对象分配一个 id 没有任何意义,因为它通常是后端执行此操作,您可能会在保存数据之前对其进行检查......所以要回答您的问题,重置功能将分配您想要的为默认值(null、空字符串、预定义英雄技能等)
-
我当然同意你的看法。我在这里吹毛求疵,但他们表示这一点的方式,newHero 函数没有意义。无论你在那里设置什么,它都会被覆盖。我认为更改顺序是有意义的(首先重置表单,然后调用函数)。我只能想象这会引起一些混乱。以我为例!
标签: javascript angular