为什么添加额外的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次?