7

我有 2 个文本框,一个是必需的,另一个是不需要的。

如果我们在所需的文本框中添加文本,例如“ABC”,然后删除内容,ng-model则设置为undefined

如果我们将文本添加到非必填字段并删除内容,ng-model则不是空字符串""

这是我上面解释的行为的一个小插曲。请使用控制台查看结果。

http://plnkr.co/edit/XgQBfcyRF3OwG1qC0gXb?p=preview

为什么两者之间的设置有区别ng-model

4

1 回答 1

2

似乎是设计 使然,并且与验证表单值的一致行为有关。

文档中没有任何关于此行为的内容,AFAIK .. 这里暗示 -> https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1045

使用 angularJS 验证,如果允许在字段上输入值,则该值将成为模型的值(就像任何其他绑定值一样)。如果不是,则保持一致的唯一方法是将值设置为未定义(因为该字段中没有允许的值)。另外两个选项是保留它的最后一个有效值,或者继续绑定错误的值,只触发无效字段和表单的标志。这两种解决方案都很糟糕 - 可能不希望留下最后一个值(如果您使用不考虑表单状态的值,则会导致错误)并且允许无效值是一种可怕的罪过;)(你不能' t 信任验证服务来帮助防止错误使用错误类型)

尽管它可能看起来很奇怪,甚至不一致,但事实并非如此。我稍微修改了您的 plunkr 以验证一个数字,我相信这可以更清楚地说明为什么会这样:http ://plnkr.co/edit/9gJmblUn9MUUeFt5lWJZ?p=preview 。

因此,实际上没有区别 - 只有在您的第二个输入中,一个空字符串才被认为是该字段的有效值,因此是可接受的值。

于 2013-07-12T14:56:21.100 回答