Я не делаю ничего особенного.
У меня есть вход, который я хочу проверить с каждым нажатием клавиши. Если проверка не выполнена, отобразите ошибку. Не ждите, пока событие размытия вызовет нажатие кнопки $.
Я думал, что это случай по умолчанию, но, видимо, это не так. Я использую угловые материалы вместе с угловыми сообщениями. Я делаю это для обнаружения каплексов.
Разметка:
<form name="primaryLogin" novalidate>
<md-content layout-padding layout="column">
<md-input-container flex>
<label>Login ID</label>
<input type="text" required="" name="login" ng-model="primary.loginID" capslock>
<div ng-messages="primaryLogin.$error">
<div ng-message="required">
Please enter a Login ID.
</div>
<div ng-message="capslock">
Caps Lock is ON!
</div>
</div>
<pre>{{ primaryLogin | json }}</pre>
</md-input-container>
</md-content>
</form>
Когда я впервые прихожу на страницу, включите блокировку кол-ва и начните вводить текст, мое сообщение об ошибке выглядит так:
{
"$error": {
"capslock": [
{
"$viewValue": "Q",
"$validators": {},
"$asyncValidators": {},
"$parsers": [
null
],
"$formatters": [
null,
null
],
"$viewChangeListeners": [],
"$untouched": false,
"$touched": true,
"$pristine": false,
"$dirty": true,
"$valid": false,
"$invalid": true,
"$error": {
"capslock": true
},
"$name": "login",
"$options": {
"debounce": 100,
"updateOnDefault": true
}
}
]
},
"$name": "primaryLogin",
"$dirty": true,
"$pristine": false,
"$valid": false,
"$invalid": true,
"$submitted": false,
"login": {
"$viewValue": "Q",
"$validators": {},
"$asyncValidators": {},
"$parsers": [
null
],
"$formatters": [
null,
null
],
"$viewChangeListeners": [],
"$untouched": true,
"$touched": false,
"$pristine": false,
"$dirty": true,
"$valid": false,
"$invalid": true,
"$error": {
"capslock": true
},
"$name": "login",
"$options": {
"debounce": 100,
"updateOnDefault": true
}
}
}
Таким образом, похоже, что он работает так, как ожидалось, но фактическое сообщение об ошибке не отображается, пока событие blur не срабатывает на этом конкретном входе. Поэтому я могу входить с caplock, типа 10 символов, объект ошибки говорит, что ошибка в кэксе, но поскольку $ touched не соответствует действительности, то это не отображается.
Когда значение $ touch установлено равным true, тогда я могу вернуться во вход и все работает как ожидалось.
Есть идеи? Заранее спасибо!