我自己做了一個自定義指令,它工作正常,但現在我得到了一個表格,其中有一些禁用的字段與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