Angular Formly — сообщения об ошибках не появляются

Ниже приведен простой пример моего поля:

{
  key: 'name',
  type: 'input',
  validators: {
    nameValid: {
      expression: function(viewValue, modelValue){
        var value = modelValue || viewValue;
        return (some condition on value);
      },
      message: '$viewValue + " is not a valid string"'
    }
  },
  templateOptions: {
    label: 'Name',
    placeholder: 'Name',
    options: [],
    required: true
  },
  validation: {
    messages: {
      required: function(viewValue, modelValue, scope) {
        return scope.to.label + ' is required';
      }
    }
  }
},

У меня есть сообщения проверки, установленные как для определенного условия, так и для обязательного условия поля. Однако, если мое условие не выполняется или поле не заполнено, сообщения об ошибках не появляются. Поле просто становится красным (как и должно быть), но как я могу заставить его также отображать мои сообщения об ошибках?


person kshah    schedule 30.12.2015    source источник


Ответы (2)


Добавьте шаблон ошибки и повторите попытку. Лучше предоставить ссылку jsbin для отладки.

<script type="text/ng-template" id="custom-messages.html">
    <div class="my-messages" ng-messages="options.formControl.$error" ng-if="options.validation.errorExistsAndShouldBeVisible">
        <div class="error-message" ng-message="{{::name}}" ng-repeat="(name, message) in ::options.validation.messages">
            {{message(options.formControl.$viewValue, options.formControl.$modelValue, this)}}
        </div>
    </div>
</script>
person cypronmaya    schedule 31.12.2015
comment
Спасибо, кажется, я пропустил шаблон ошибки. Не могли бы вы объяснить мне (возможно, построчно), как это работает? - person kshah; 31.12.2015
comment
вы можете выбрать любой пример, приведенный на странице angular-formly. angular-formly.com/#/example/other/error-summary который будет отображать сообщение об ошибке, а также сводку ошибок, если вам интересно - person cypronmaya; 31.12.2015

Вы можете установить оболочку для поля ввода в функции app.config, чтобы показать сообщение об ошибке.

app.config(function (formlyConfigProvider)({
      formlyConfigProvider.setWrapper({
         name: 'validation',
         types: ['input'],
         template:'<formly-transclude></formly-transclude><div ng-messages="fc.$error" ng-if="form.$submitted || options.formControl.$touched" class="error-messages"><div ng-message="{{ ::name }}" ng-repeat="(name, message) in ::options.validation.messages" class="message">{{ message(fc.$viewValue, fc.$modelValue, this)}}</div></div>'
        //templateUrl: 'error-messages.html'
});}};
person Abhijeet    schedule 05.01.2016