Я создал специальный валидатор, требующий, чтобы дата была в прошлом. Валидация, похоже, отлично работает при вводе даты вручную в поле. Однако, если я вводю изменения даты программным путем (измените модель напрямую, а не набирать в поле), проверка не срабатывает.
Я считаю, что я выполняю собственную директиву проверки, как указано в документации. Вот 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;
});
}
};
});