我自己做了一个自定义指令,它工作正常,但现在我得到了一个表格,其中有一些禁用的字段与ng-disabled
,我相信我必须调用setTimeout
函数,因为ng-disabled
可能发生后,事实上,但我不知道我编码正确...是我的代码正确的方式?我不确定是否有一个特殊位置来放置setTimeout
一段代码,我甚至不确定它实际上是否正确......但它确实似乎起作用......所以有人可以验证和/或更新我的代码是否需要?Angular自定义验证指令 - 如何正确跳过禁用的字段?
// Angular - custom Directive
directive('myDirective', function($log) {
return {
require: "ngModel",
link: function(scope, elm, attrs, ctrl) {
validate = function(value) {
.....
}
var validator = function(value) {
// invalidate field before doing validation
ctrl.$setValidity('validation', false);
elm.unbind('keyup').bind(keyup, function() {
// make the regular validation of the field value
var isValid = validate(value); // call validate method
scope.$apply(ctrl.$setValidity('validation', isValid));
});
// for the case of field that might be ng-disabled, we should skip validation
setTimeout(function() {
if(elm.attr('disabled')) {
ctrl.$setValidity('validation', true);
}
}, 0);
return value;
};
// attach the Validator object to the element
ctrl.$parsers.unshift(validator);
ctrl.$formatters.unshift(validator);
}
};
});
编辑
我必须指出,这段代码是我的代码一个非常微小的一部分,我只用了它的相关部分,并在是第一次看unbind('keyup')
不作很有意义,除非你看到真正的代码更像unbind('keyup').bind(optionEvnt)
......这实际上是给出了一个额外的可选功能,选择你想要在验证器上使用的事件触发器,并且当我使用blur
事件时,默认的键盘操作会产生干扰。在许多表单验证中,我倾向于使用blur
事件,这就是为什么它是可选功能。
真正的代码可以在我的Github/Angular-Validation,并提供给大家使用......看看,你可能会喜欢它足以在你的代码:)
Chen-Tsu Lin ...为什么当问题与AngularJS严格相关时,你会不断添加'javascript'标签?你知道还有其他的方式来获得分数,然后每天添加标签... – ghiscoding