【发布时间】:2023-03-05 13:53:01
【问题描述】:
我有一个指令旨在对日期输入字段(最早和最新)施加日期范围限制。这是下面的指令,我正在使用 momentjs 库进行日期比较:
.directive('startDate', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
console.log(arguments);
var compareStartDates = function (value) {
var startDateCompare = moment((attrs.startDate ? scope.$eval(attrs.startDate) : '1901-01-01'), 'YYYY-MM-DD');
if (startDateCompare && startDateCompare.isValid() && value && value.match(/\d{4}\-?\d{2}\-?\d{2}/g)) {
var valueMoment = moment(value, 'YYYY-MM-DD');
if (valueMoment && valueMoment.isValid() && valueMoment < startDateCompare) {
ctrl.$setValidity('startdate', false);
ctrl.$error['startdate'] = true;
return undefined;
}
}
ctrl.$setValidity('startdate', true);
return value;
};
ctrl.$parsers.unshift(compareStartDates);
}
};
})
JSFiddle:http://jsfiddle.net/2ug4X/
查看上面的小提琴并执行以下操作:
1) 在文本框中输入“A”,触发模式错误。 2)单击“CLICK ME”文本,更新示波器上模型的值,注意错误清除 3)在文本框中输入“1800-01-01”,日期限制错误触发 4) 在文本框中输入“2000-01-01”,这是一个有效日期,应该清除 startdate 错误但它没有。知道为什么会这样吗?
我希望像这样更新 ng-model 绑定变量
scope.sample.open_date = '2000-01-01';
将清除输入元素上的错误,就像清除模式错误一样。
【问题讨论】:
标签: angularjs