我创建了一个自定义验证器,要求日期是过去的。在字段中手动输入日期时,验证似乎效果很好。但是,如果我以编程方式输入更改日期(直接更改模型而不是在字段中键入),则不会触发验证。
我相信我正在按照文档中的指示执行自定义验证指令。 这是一个说明问题的jsFiddle。在小提琴中,如果您单击“以编程方式更改日期”按钮,您会看到验证错误不会显示(但如果您手动更改它会显示)。这是指令代码(也在小提琴中):
myApp.directive('pastDate', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
var today = new Date();
today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
if (new Date(viewValue) < today) {
ctrl.$setValidity('pastDate', true);
return viewValue;
}
ctrl.$setValidity('pastDate', false);
return undefined;
});
}
};
});