Validation not triggered when data binding a number input's min / max attributes

前端 未结 5 1220
遥遥无期
遥遥无期 2020-12-01 08:29

I have numerous number input fields that have min and max attribute values that depend on logic elsewhere in my AngularJS app, but when using data bindings within these attr

5条回答
  •  孤街浪徒
    2020-12-01 09:16

    I also wrote a custom directive for it:

    Working demo: http://plnkr.co/edit/BJ98ZR?p=preview

    .directive('validateRange', ['$parse', function($parse) {
    
        function link($scope, $element, $attrs, ngModel) {
            var attrRange, range = [];
    
            function validate(value) {
                var validMin = true, validMax = true;
                if (typeof range[0] === 'number') {
                    ngModel.$setValidity('min', value >= range[0]);
                    validMin = value >= range[0];
                }
                if (typeof range[1] === 'number') {
                    ngModel.$setValidity('max', value <= range[1]);
                    validMax = value <= range[1];
                }
                return validMin && validMax ? value : undefined;
            }
    
            attrRange = $attrs.validateRange.split(/,/);
    
            range[0] = $parse(attrRange[0] || '')($scope);
            range[1] = $parse(attrRange[1] || '')($scope);
    
            $scope.$watchCollection('[' + $attrs.validateRange + ']', function(values) {
                range = values;
                validate(ngModel.$viewValue);
            });
    
            ngModel.$parsers.unshift(validate);
            ngModel.$formatters.unshift(validate);
        }
    
        return {
            link: link,
            require: 'ngModel'
        };
    
    }]);
    

    Example use:

    Min Value: Value: Max Value:
            myform.minvalue.$error {{ myform.minvalue.$error }}
            myform.value.$error    {{ myform.value.$error }}
            myform.maxvalue.$error {{ myform.maxvalue.$error }}
        

提交回复
热议问题