在我的试验中,我没有发现您的代码有任何问题。但是,如果您确实遇到模糊和单击按钮似乎发生冲突的情况,您可以设置一个在触发有效性时设置的变量,并在验证完成后重置。
基本上,在指令上的链接函数中,具有以下内容:
//Keeps track of the validation being active
var validationInProgress = false;
function dovalidation () {
validationInProgress = true;
//Validation code goes here
if (EMAIL_REGX.test(elm.val())) {
ctrl.$setValidity('emails', true);
} else {
ctrl.$setValidity('emails', false);
}
//Set this after validations are over
//Should be the last statement in this function
validationInProgress = false;
}
完成此操作后,每次调用dovalidation()
, 在调用之前检查是否已经在进行验证 - 如果没有,则仅调用。
elm.bind('blur', function () {
if (!validationInProgress) {
scope.$apply(dovalidation);
}
});
scope.$on('kickOffValidations', function () {
if (!validationInProgress) {
dovalidation();
}
});
编辑:具有上述更新的Plunkr代码。