我写了两个验证指令。每个都可以单独工作,但是当两者都应用时,numberValidator 会在 rangeValidator 失败时失败(因此,因为“3”使 rangeValidator 失败,它也会失败 numberValidator,即使它在 rangeValidator 不在图片中时通过)。
日志记录验证 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;
}
});
}
};
});