Angular 1.3+中的自定义最小/最大字数验证器?

时间:2014-11-03 23:50:50

标签: angularjs validation

我想在Angular 1.3+中创建一对自定义字数统计验证器,我可以传递最小值/最大值,例如如下所示:

<input type=text min-word-count="10" max-word-count="200">

我从official documentation on the subject收集一个类似于以下整数示例的自定义指令应该是合适的:

app.directive('integer', function() {
  return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
      ctrl.$validators.integer = function(modelValue, viewValue) {
        if (ctrl.$isEmpty(modelValue)) {
          // consider empty models to be valid
          return true;
        }

        if (INTEGER_REGEXP.test(viewValue)) {
          // it is valid
          return true;
        }

        // it is invalid
        return false;
      };
    }
  };
});

但是,我不确定如何自定义此示例以便动态传递自定义值。

将值传递给上述自定义验证指令的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

app.directive('maxWordCount', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {

        //For DOM -> model validation
        var maxLimit = attrs.maxWordCount;
        ctrl.$parsers.unshift(function(value){

            var valid = true;

            if(value){
                valid = value.split(' ').length <= maxLimit;
            }

            ctrl.$setValidity('maxWordCount', valid);
            return valid ? value : undefined;
        });

        //For model -> DOM validation
        ctrl.$formatters.unshift(function(value) {

            var valid = true;

            if(value){
                valid = value.split(' ').length <= maxLimit;
            }

            ctrl.$setValidity('maxWordCount',valid);
            return value;
        });

    }
};
});