如何在 Angular JS 中设置 ng-valid-parse

How the ng-valid-parse is set in Angular JS

我有一个格式化日期的指令。输入格式错误时应该return ng-invalid 等错误信息。现在它可以在这种情况下设置 ng-invalide,但如果输入格式错误,它也会设置 ng-valid-parse。在我看来,由于格式错误,它是无效的。

所以我的问题来了:ng-valid-parse 是如何设置的?

myDirectives.directive('myDateFormat', function ($window) {
'use strict';
return {
    require: 'ngModel',
    restrict: 'A',
    link: function (scope, elm, attrs, ctrl) {

        // other codes ...

        ctrl.$parsers.unshift(function (viewValue) {
            var date = moment(viewValue, dateFormat);
            if(date && date.isValid()){
                return date.toDate();
            }else{
                ctrl.$setValidity('myDateFormat', false);
                return ""; // or it should return false here?
            }
        });
    }
};
});

谢谢!

向 ngModelController 添加自定义解析验证器:

ctrl.$validators.parse = function(modelValue, viewValue){
  return (modelValue instanceof Date)&&!isNaN(modelValue.getTime());
}

当我在 5 个月后回顾我的问题时,我发现了这个类似的问题

即使我将有效性设置为 false : ctrl.$setValidity('myDateFormat', false);,但是 $parsers return 一个 非未定义的 对象。这意味着解析有效,因此设置了ng-valid-parse