当范围更改值时,angularjs输入字段指令不会清除错误

时间:2013-12-27 14:27:31

标签: angularjs

我有一个指令,旨在对日期输入字段(最早和最晚)施加日期范围限制。这是下面的指令,我使用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';

会清除输入元素上的错误,就像清除模式错误一样。

1 个答案:

答案 0 :(得分:2)

在Stack上搜索更多内容后找到了这个:AngularJS custom validation not firing when changing the model programatically

似乎我的错误也没有将比较函数推送到ctrl。$ formatters如此:

ctrl.$formatters.unshift(compareStartDates);

这就是诀窍!