Geçmişte olması için tarih gerektiren bir özel doğrulayıcı oluşturdum. Doğrulama, alana manuel olarak girerken harika çalışır gibi görünüyor. Bununla birlikte, eğer programlı olarak tarihi değiştirirseniz (modeli yazımın tersine doğrudan model olarak değiştirin), doğrulama yanmaz.AngularJS özel doğrulama, programlı olarak değiştirilirken tetiklenmiyor
Belgede belirtildiği gibi özel doğrulama yönergesini yapıyorum. Problemi gösteren Here is a jsFiddle. Kemanda, "Tarihi programlı olarak değiştir" düğmesini tıklatırsanız, doğrulama hatasının görüntülenmediğini görebilirsiniz (ancak bunu el ile değiştirirseniz).
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;
});
}
};
});
Felix :) – Terry
@Terry yah maalesef ofiste kek özleyeceğiz bugün bu beni yendi. – yuxhuang
Açıklama için teşekkürler, bu, $ parsers ve $ formatters arasındaki farkı anladığımdan çok daha mantıklı. –