为什么添加额外的AngularJS验证指令会导致$asyncValidators在页面加载时多次运行?
我创建了一个实现$asyncValidators的自定义指令.这是该自定义指令的基本结构:
myApp.directive('userSaved',['$q','userLookup',function($q,userLookup){ return { restrict: 'A',require: 'ngModel',link: function(scope,elem,attrs,ctrl){ ctrl.$asyncValidators.userSaved = function(modelValue,viewValue) { // do stuff } } } }]);
控制器初始化tailNumber模型值,如下所示:
$scope.tailNumber = 'N33221';
<input ng-model="tailNumber" name="tailNumber" user-saved ng-minlength="2" ng-pattern="/^[A-z][a-zA-Z0-9]*$/" >
当我删除ng-minlength =“2”时,用户保存的指令在页面加载时运行两次(2次).这是移除了ng-minlength =“2”的html:
<input ng-model="tailNumber" name="tailNumber" user-saved ng-pattern="/^[A-z][a-zA-Z0-9]*$/" >
当我删除ng-pattern =“/ ^ [A-z] [a-zA-Z0-9] * $/”时,用户保存的指令只运行一次.这是移除ng-pattern =“/ ^ [A-z] [a-zA-Z0-9] * $/”后的html
<input ng-model="tailNumber" name="tailNumber" user-saved >
为什么我的函数注册了$asyncValidators为附加到表单元素的每个额外的ng验证器运行额外的时间?
我的自定义指令是一个昂贵的$http调用,我更喜欢我的自定义指令只在页面加载时运行一次.是否可以使用所有这些ng验证器,而只运行我的异步验证器功能一次而不是页面加载3次?
这是因为像ngMaxlength,ngPattern这样的验证指令通过调用ngModelController来调用初始验证周期.$validate().
这会导致所有验证指令运行其验证逻辑,包括异步验证器.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。