使用angular-auto-validate输入特定的验证消息

时间:2018-07-19 20:41:44

标签: angularjs

我继承的应用程序正在使用angular-auto-validate处理表单验证。我只是收到一个要求,我们需要能够处理诸如regex之类的输入特定的验证消息,而标准“您的输入必须符合/ some-pattern /”将无法使用。通常,我会为此使用ng-message,但似乎不适用于angular-auto-validate

我所做的是这样:

/**
 Looks up defined validations for the given input and dynamically applies 
 The appropriate directive for the defined validation.
*/
var validate = function (WizardDataService, $compile, defaultErrorMessageResolver) {

  return {
      priority: 1000,
      link: function (scope, element, attrs) {

      // check if we have a custom message
      function check_error(type, message){
        if( message ){
          defaultErrorMessageResolver.getErrorMessages()
          .then(function(errorMessages){errorMessages[type]=message})
        }
      };

        element.removeAttr('validation');
        WizardDataService
            .getValidations(scope.qid) // returns { validation_type, error_msg, addl_info }
            .then(function(data){
          angular.forEach(data, function(value, i) {
            switch(value.validation_type) {
              case 'Numeric':
                check_error('number', value.err_msg);
                attrs.$set('type', 'number');
                break;
              case 'Email Address':
                check_error('email', value.err_msg);
                attrs.$set('type', 'email');
                break;
              case 'Regex':
                check_error('pattern', value.err_msg);
                attrs.$set('ng-pattern', new RegExp(value.addl_info))
                break;
              case 'Min Length':
                check_error('minlength', value.err_msg);
                attrs.$set('ng-minlength', value.addl_info)
                break;
              case 'Max Length':
                check_error('maxlength', value.err_msg);
                attrs.$set('ng-maxlength', value.addl_info)
                break;
              case 'Phone Number':
                check_error('pattern', value.err_msg);
                attrs.$set('ng-pattern', /^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/)
                break;
              case 'Mandatory':
                attrs.$set('ng-required', true)
                break;
              default:
                break;
              };
          });
          $compile(element)(scope);

        });
    },
    scope: {
      qid: '@'
    },

  }
};

问题是check_error函数更改具有该验证类型的每个输入的错误消息。因此,例如,如果我有多个需要进行正则表达式验证的输入,那么两个输入都不会有自己的消息。

0 个答案:

没有答案