AngularJS: заставить работать выборку по нажатию выпадающего меню, выпуск ngMessages
Итак, у меня есть поле выбора, которое заполняет некоторые значения в раскрывающемся списке, используя ng-options
Поэтому я хочу показать сообщения об ошибках, как только пользователь нажмет на выпадающий список и сфокусируется, не делая выбора.
Код JS
$scope.someMap = [{ name:"Abc", id:"a"},
{ name:"XYZ", id:"b"},
{ name:"FGH", id:"c"},
{ name:"TY", id:"d"}
];
HTML
<select name="inpName" ng-model="person.name" ng-options="i as i.name for i in someMap track by i.id" required>
<option value="" selected hidden/> </select>
<div ng-messages="form.inpName.$error" ng-if="form.inpName.$touched">
<div ng-message="required">Required field</div>
</div>
</div>
Так что это работает в случае, когда я добавляю пустую опцию, как option value="" selected hidden/> </select>
и выберите какое-то допустимое значение, а затем снова выберите пустую опцию, и в поле "Обязательное" появится сообщение об ошибке.
Но, как вы можете видеть, вышеприведенное поле выбора будет пустым после загрузки страницы, поэтому, если использовать щелчок по раскрывающемуся меню и сфокусироваться, не выбирая, или переместиться в другое поле без выбора какого-либо значения, это должно привести к ошибке в качестве поля Обязательное.
Теперь, если я попытаюсь выполнить итерацию по значению form.inpName.$error никогда не будет иметь никакого значения, и я не могу проверить его, используя описанную выше технику.
я пытался ng-show , ng-if , message expression
Возможно, мне не хватает некоторого опыта. Все они работают после выбора действительной записи из выпадающего списка и последующего возврата к пустому параметру.
Решения, которые не будут работать для меня
- Проверьте значение модели: я не хочу переходить к модели для этих типов полей и проверять, не заполнены ли они, а затем отображать какое-то сообщение об ошибке, скорее я хочу пройтись по массиву $ error и найти проблему с полем
- Сделайте опцию по умолчанию выбранной при загрузке страницы - Невозможно сделать это.
- Добавить поле в качестве выбранных опций: Это также не будет работать, потому что если пользователь не коснулся выделения и заполнил все остальные поля, $ error не будет заполняться для этого выпадающего списка.
Любая помощь будет высоко ценится, действительно ударил по этому.
1 ответ
Как помогло @Ininiv в вышеприведенном посте, код, который я разместил, отлично работает в plunker, но не в моей среде разработки.
Таким образом, на основе некоторых объектов POJO/Entity out форматируется со свойствами как null. Так что, когда я выбираю и заполняю опцию angular, это не выглядит как изменение в модели, если только я не выберу значение из выпадающего списка и снова не выберу пустой параметр из выпадающего списка, Это активируется.
Но я хотел, чтобы он начал работать с самого первого касания, если оставить пустым, должно появиться сообщение об ошибке.
Чтобы решить эту проблему, ngModel нужно было установить на ноль, когда раскрывающийся список активирован $ error, и если я оставлю это поле пустым и перейду в другое поле, появится ошибка.
Так что в основном при смене модели активируется только директива ngMessages, чего не было для выпадающих списков, которые заполнялись на основе некоторых свойств объекта.