为什么添加额外的 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';
这是user-saved
指令在页面加载时运行3 次的 html:
<input ng-model="tailNumber" name="tailNumber" user-saved
ng-minlength="2" ng-pattern="/^[A-z][a-zA-Z0-9]*$/" >
当我删除时ng-minlength="2"
,该user-saved
指令在页面加载时运行两次(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]*$/"
,该user-saved
指令仅运行1 次。这是删除后的htmlng-pattern="/^[A-z][a-zA-Z0-9]*$/"
<input ng-model="tailNumber" name="tailNumber" user-saved >
为什么我注册的函数$asyncValidators
会为附加到表单元素的每个额外的 ng 验证器运行额外的时间?
我的自定义指令是一个昂贵的$http
调用,我更喜欢我的自定义指令只在页面加载时运行一次。是否可以使用所有这些 ng 验证器,并且只在页面加载时运行我的异步验证器功能一次而不是 3 次?