min/max validations not working if values are changed later

前端 未结 2 1749
清酒与你
清酒与你 2020-12-09 21:40

i have requirement where min value of one field depends on the input given in another field.



        
2条回答
  •  忘掉有多难
    2020-12-09 21:50

    use ng-min/ng-max directives

    app.directive('ngMin', function() {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function(scope, elem, attr, ctrl) {
                scope.$watch(attr.ngMin, function(){
                    if (ctrl.$isDirty) ctrl.$setViewValue(ctrl.$viewValue);
                });
    
                var isEmpty = function (value) {
                   return angular.isUndefined(value) || value === "" || value === null;
                }
    
                var minValidator = function(value) {
                  var min = scope.$eval(attr.ngMin) || 0;
                  if (!isEmpty(value) && value < min) {
                    ctrl.$setValidity('ngMin', false);
                    return undefined;
                  } else {
                    ctrl.$setValidity('ngMin', true);
                    return value;
                  }
                };
    
                ctrl.$parsers.push(minValidator);
                ctrl.$formatters.push(minValidator);
            }
        };
    });
    
    app.directive('ngMax', function() {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function(scope, elem, attr, ctrl) {
                scope.$watch(attr.ngMax, function(){
                    if (ctrl.$isDirty) ctrl.$setViewValue(ctrl.$viewValue);
                });
                var maxValidator = function(value) {
                  var max = scope.$eval(attr.ngMax) || Infinity;
                  if (!isEmpty(value) && value > max) {
                    ctrl.$setValidity('ngMax', false);
                    return undefined;
                  } else {
                    ctrl.$setValidity('ngMax', true);
                    return value;
                  }
                };
    
                ctrl.$parsers.push(maxValidator);
                ctrl.$formatters.push(maxValidator);
            }
        };
    });
    

提交回复
热议问题