ngMessages: как получить доступ к сведениям об ошибке (таким как минимальная длина, имя поля и т. д.)?

Как мой ngMessages может получить доступ к информации об ошибке формы? Например, имя поля и другие свойства?

Пример:

Я видел много примеров, которые выглядят так:

<input type="text" ng-model="field" name="myField" minlength="5">
<div ng-messages="myForm.myField.$error">
  <div ng-message="minlength">The value entered is too short</div>
</div>

Это не очень хорошее сообщение об ошибке, потому что оно не сообщает пользователю, какой длины должен быть ввод. Оно просто сообщает, что оно слишком короткое.

Это должно выглядеть примерно так: "Это поле должно содержать не менее {{ minlength }} символов".

Еще лучше: "{{ field }} должно содержать не менее {{ minlength }} символов."

Необходимость определять разные сообщения для входов разной минимальной длины крайне не СУХАЯ.

Как это можно сделать с помощью ngMessages?


person Kyle Fox    schedule 01.12.2015    source источник


Ответы (2)


Вы можете оставить значение minlength в области видимости, а затем привязаться к нему в сообщении проверки.

<input type="text" ng-model="field" name="myField" minlength="::myFieldMinlength">
<div ng-messages="myForm.myField.$error">
    <div ng-message="minlength">This field must be at least {{::myFieldMinlength}} characters.</div>
</div>
person JayChase    schedule 02.12.2015
comment
Спасибо, но я не совсем уверен, что понимаю. Является ли myFieldMinlength переменной области видимости, заданной контроллером, например: $scope.myFieldMinlength = 6? - person Kyle Fox; 10.12.2015
comment
Да, это правильно. Это был единственный способ, которым я мог придумать значение, доступное для сообщения проверки. - person JayChase; 10.12.2015
comment
Попался, спасибо. Однако я не уверен, как это будет работать, если форма должна вводить данные с разной минимальной длиной... - person Kyle Fox; 10.12.2015

Я бы сделал так же, как предложил jayChase. Это определенно самый простой способ, и, как он предложил, использование одиночной привязки не будет плохой производительностью.

person Raffaele Rizzetti    schedule 02.12.2015