我有 2 个文本框,一个是必需的,另一个不是必需的。
如果我们在所需的文本框中添加文本,例如“ABC”,然后删除内容,ng-model
将设置为 undefined
如果我们向非必填字段添加文本并删除内容,ng-model
不会为空字符串 ""
。
这是关于我在上面解释的行为的一个小插曲。请使用控制台查看结果。
http://plnkr.co/edit/XgQBfcyRF3OwG1qC0gXb?p=preview
为什么两者在ng-model
设置上有区别?
最佳答案
它是似乎是设计使然,并且与经过验证的表单值的一致行为有关。
文档中没有关于此行为的任何内容,AFAIK.. 这里暗示 -> https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1045
使用 angularJS 验证,如果允许在字段中输入值,则该值将成为模型的值(与任何其他绑定(bind)值的行为一样)。如果不是,保持一致的唯一方法是将该值设置为未定义(因为该字段中没有允许的值)。另外两个选项是保留它的最后一个有效值,或者继续绑定(bind)错误的值,只触发无效字段和表单的标志。这两种解决方案都很糟糕 - 可能不需要保留最后一个值(如果您要使用这些值而不考虑表单的状态,则会导致错误)并且允许无效值是一个可怕的罪过;)(你不能'不要相信验证服务有助于防止使用错误类型的错误)
虽然它看起来很奇怪甚至不一致,但事实并非如此。我稍微修改了您的 plunkr 以验证一个数字,我相信这可以更清楚地说明为什么会这样:http://plnkr.co/edit/9gJmblUn9MUUeFt5lWJZ?p=preview .
因此,实际上没有区别 - 只有在您的第二个输入中,空字符串才被认为是有效的,因此是该字段可接受的值。
关于javascript - 需要 TextBox 的 Angular 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608469/