如果将任何用于验证的角度指令(ng-minlength,ng-maxlength,ng-pattern等)添加到绑定到微风实体的输入,如果发现无效,它将阻止任何用户输入.
如果ng-model的值初始有效,则会显示该值,但是如果将值更改为无效的输入字段被清除,则模型将设置为null,并且您不能输入任何可能最初无效的内容.但是,如果您将有效值复制到显示的字段中.
我会很好,当模型值设置为null时,如果没有清除输入,然后防止更改,则为无效.
也有一种感觉,无论是什么导致这个问题也搞砸了ui面具.在没有角度确认指令的情况下也会发生同样的事情.
这是一个Plunker,我发现一个类似的问题,我修改显示我的问题:
http://plnkr.co/edit/dVsF7GFY65a30soLL5W8?p=preview
编辑
经过许多小时的研究,我找到了一个解决方案,虽然我不知道有什么不良副作用.
它通过将$modelValue设置为’undefined’,如果它失败了任何验证器,因为它通过$解析器和$formatters的方式,首先要确定角度.
我发现这个代码在Angular(第16331行)中被每个角度验证器调用:
function validate(ctrl,validatorName,validity,value){ ctrl.$setValidity(validatorName,validity); return validity ? value : undefined; }
我改变它返回’值’而不是’undefined’:
function validate(ctrl,value){ ctrl.$setValidity(validatorName,validity); return value; }
角度仍然正确设置验证.虽然我相信这不是最好的解决方案,甚至是一个好的解决方案.
我怀疑当Angular将$modelValue设置为’undefined’时,问题出现,然后Breeze看到模型已经更改,然后更新实体,然后更新模型,然后清除输入…等等…
我发现这对我的追求有帮助.也许这对你们中有一个比07 07年更了解的人更有帮助
解决方法
Angular 1.3.0-rc.1引入了allowInvalid选项以用于ngModelOptions指令.它本质上是在16331行的OP的黑客的正式化.该选项指示Angular允许将无效的表单输入写入$范围,并且整齐地解决问题.
用法:
<input type="email" ng-model-options="{allowInvalid: true}" ng-model="my_breeze_model.email"/>
有关详细信息,请参阅此功能要求:https://github.com/angular/angular.js/issues/8290.