正在调用验证程序,并按预期返回true / false。但是,即使验证器返回false,html仍会按预期显示类“ng-valid”而不是“ng-invalid”,以使ng-messages行为正常。当我使用标准的“必需”错误时,没有任何问题,但任何自定义都不起作用。
经过调试,我还发现$ error正在根据需要更新,但不是几天。
我创建了一个具有自定义验证器daysofmonth的组件,如下所示:
this.ngModel.$validators.daysofmonth = function(modelValue) {
modelValue = modelValue || '';
let pieces = modelValue.split(',');
let isValid = true;
pieces.forEach(function(piece) {
let numberValue = parseInt(piece, 10);
if (isNaN(numberValue)) {
if (piece.trim() && piece.trim() !== 'L') {
isValid = false;
}
} else if (numberValue < 1 || numberValue > 31) {
isValid = false;
}
});
return isValid;
};
html看起来像:
<form name="form">
<div>
<input name="daysofmonth" ng-model="ctrl.daysOfMonth">
</div>
<ng-messages for="form.daysofmonth.$error">
<ng-message when="daysofmonth">Please enter valid days.</ng-message>
</ng-messages>
</form>
任何帮助将不胜感激!
答案 0 :(得分:0)
isValid永远是真的......
forEach方法是异步方法,因此如果您希望isValid变量在返回时保持最新,则必须在回调中执行此操作。但是,您将从回调而不是从函数返回结果,因此,另一种方法是用标准的同步for循环替换forEach循环。