我寫了兩個驗證指令。每個人都可以單獨工作,但是當兩者都應用時,numberValidator在任何時候都會失敗rangeValidator失敗(因此,因爲「3」失敗了rangeValidator,所以即使rangeValidator超出圖片範圍,它也會失敗numberValidator)。多個角度校驗器獨立工作,但不在一起
日誌記錄驗證numberValidator確實失敗(與HTML中的某些錯誤相比)。
我會期望指令獨立於另一個 - 我不想讓用戶輸入「3」,仍然看到「必須是數字」。
使用數字輸入不是一個選項。
我的JS:
app.directive('rangeValidator', function() {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
var min = scope.$eval(attrs.minValue);
var max = scope.$eval(attrs.maxValue);
ctrl.$parsers.unshift(function (viewValue) {
if (parseInt(viewValue) >= min && parseInt(viewValue) <= max) {
// it is valid
ctrl.$setValidity('rangeValidator', true);
return viewValue;
} else {
// it is invalid, return undefined (no model update)
ctrl.$setValidity('rangeValidator', false);
return undefined;
}
});
}
};
});
app.directive('numberValidator', function() {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
if (!isNaN(parseInt(viewValue))) {
// it is valid
console.log('Number Validator passed!');
ctrl.$setValidity('numberValidator', true);
return viewValue;
} else {
// it is invalid, return undefined (no model update)
ctrl.$setValidity('numberValidator', false);
return undefined;
}
});
}
};
});
我的目標是避免更新模型(在這種情況下,檢查現場狀態會很快令人厭煩),所以我很欣賞雙重方法。謝謝! –