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