Angularjs 表单验证函数应该如何产生错误消息?

Angularjs 表单验证函数应该如何产生错误消息?,angularjs,angular-formly,Angularjs,Angular Formly,我有一个异步Formly字段验证函数,用于多种形式,并检查字段的多个方面。我希望能够从字段验证函数中“返回”(在一般意义上)错误文本,该函数准确地说明字段的错误 最好的方法是什么?我猜我想将文本发送到范围中,但我不确定在哪里。我已经翻遍了所有的示例(我想),但没有发现任何相关信息。Angular支持使用自定义验证,因此,例如,如果要检查用户名的唯一性,可以创建自己的指令来执行此操作 像这个例子: 您可以通过检查唯一性来创建指令,并检查指令是否被触发,然后使用ng show仅在需要时显示指令 此

我有一个异步Formly字段验证函数,用于多种形式,并检查字段的多个方面。我希望能够从字段验证函数中“返回”(在一般意义上)错误文本,该函数准确地说明字段的错误


最好的方法是什么?我猜我想将文本发送到范围中,但我不确定在哪里。我已经翻遍了所有的示例(我想),但没有发现任何相关信息。

Angular支持使用自定义验证,因此,例如,如果要检查用户名的唯一性,可以创建自己的指令来执行此操作

像这个例子:

您可以通过检查唯一性来创建指令,并检查指令是否被触发,然后使用
ng show
仅在需要时显示指令


此用户名已被使用!

我通过和fieldWrapper的组合来实现这一点。最初的配置是相当令人畏惧的,但是会产生一个非常灵活的验证系统,允许您同时处理同步和异步验证错误。这篇文章的大部分内容都是由这位官员拼凑而成的

formlyValidationMessages允许您为典型的验证错误配置一些默认错误消息。下面是我在项目中使用的一个示例

angular.module('myModule', ['formly']).run(formlyValidationMessages){
    formlyValidationMessages.messages.required = 'to.label + " is required"'
    formlyValidationMessages.messages.max = '"The max value allowed is " + to.max'
    formlyValidationMessages.messages.min = '"The min value allowed is " + to.min'        
}
它们可以是字符串或函数

这基本上是在角度形式的字段错误属性上设置一个手表。如果该字段的表单中存在错误(例如,
form.field.$error.required===true
),它将向字段配置对象中的validation.messages添加max

如果需要特定字段的特定错误,可以将其添加到字段定义中。e、 g

var field = {
    key: 'serialNumber',
    type: 'input'
    ....
    validation: {
      messages: {
        unique: function() {
          return 'Serial number 123 is not unique'
        }
      }
    }
    asyncValidators: {
      unique: {
          expression: function(modelValue, viewValue, scope) {
            return $timeout(
              function(){
                if(modelValue === '123') {
                  throw 'unique failure: 123'  //throw to reject promise
                }
              },
              1000
            )
          }
      }
    }
}
要向用户显示此信息,请为字段创建一个hasError包装器,用于为字段创建每个字段的错误列表

module.config(function(formlyConfigProvider) {
  formlyConfigProvider.setWrapper({
    name: 'hasError',
    template: '<div class="form-group" ng-class="{\'has-error\': showError}">' +
      '  <label class="control-label" for="{{id}}">{{to.label}}</label>' +
      '  <formly-transclude></formly-transclude>' +
      '  <div ng-messages="fc.$error" ng-if="showError" class="text-danger">' +
      '    <div ng-message="{{ ::name }}" ng-repeat="(name, message) in ::options.validation.messages" class="message">{{ message(fc.$viewValue)}}</div>' +
      '  </div>' +
      '</div>'
  })
})
module.config(函数(formlyConfigProvider){
formlyConfigProvider.setWrapper({
名称:“hasError”,
模板:“”+
“{to.label}”+
'  ' +
'  ' +
“{message(fc.$viewValue)}”+
'  ' +
''
})
})

这有一个使用引导样式的功能示例。如果输入123,将出现异步验证错误,但如果留空,将出现同步验证错误。

这不是问题的答案,该问题询问如何从形式验证函数返回文本,需要一些形式上的理解。我希望您在现在之前找到答案,我只是想记录下一种方式,因为我偶然发现了这个问题。