微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用Breeze的Angular验证指令阻止任何无效的输入

如果将任何用于验证的角度指令(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.

原文地址:https://www.jb51.cc/js/153915.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐