【问题标题】:angularjs input field directive isn't clearing errors when scope changes value范围更改值时,angularjs输入字段指令未清除错误
【发布时间】: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


    【解决方案1】:

    在 Stack 上搜索更多内容后发现:AngularJS custom validation not firing when changing the model programatically

    看来我的错误并没有像这样将比较函数推送到 ctrl.$formatters:

    ctrl.$formatters.unshift(compareStartDates);
    

    这成功了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2015-07-13
      • 2016-02-06
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多