#javascript #angularjs #validation
#javascript #angularjs #проверка
Вопрос:
У меня есть элемент управления, который условно виден и условно требуется на основе значения другого поля в форме.
<div class="form-group" ng-hide="vm.registration.typeId !== 2">
<div class="row">
<div class="col-md-offset-1 col-md-10">
<label class='col-md-3' for="dischargeYear">Discharge Year*</label>
<div class="col-md-7">
<input type="text" id="dischargeYear" name="dischargeYear"
class="form-control large-text-form main-input"
ng-model="vm.registration.dischargeYear"
ng-required="vm.registration.typeId !== 2"
ng-class="{'has-error': form.dischargeYear.$touched amp;amp; form.dischargeYear.$invalid}">
</div>
</div>
</div>
</div>
Но, даже несмотря на то, что $validators
имеет required
валидатор на dischargeYear
на form
, в $error
нем никогда не было ошибки. Что также интересно, у меня есть другой элемент управления, который работает, и единственное отличие в том ng-required
, что другой элемент управления просто помечается required
.
Кто-нибудь видел это раньше?
Комментарии:
1. вы пробовали использовать $scope.apply() после установки registration.typeId
2. У меня нет @NegiRox, но я могу попробовать.
3. я думаю, что есть какая-то проблема, потому что, как только вы установите флаг, он будет заполнен для ошибки. смотрите мой ответ ниже.
4.Эти двойные отрицания сумасшедшие. Элемент управления не виден, когда
typeId
он не2
установлен. Управление требуется, когдаtypeId
равно не 2. Следовательно, элемент управления требуется, когда он не виден.5. @georgeawg вы были абсолютно правы — с этим мне тоже пришлось разобраться. Это был долгий день, и я думаю, что я был слишком близок ко всему! 😀
Ответ №1:
В конце концов, ответом было использовать ng-if
для окружающих div
и просто required
атрибут для input
. Это сработало, потому что оно удалило элемент из DOM, когда он не был нужен, и перекомпилировало его, когда это было необходимо.
<div class="form-group" ng-if="vm.registration.typeId === 2">
<div class="row">
<div class="col-md-offset-1 col-md-10">
<label class='col-md-3' for="dischargeYear">Discharge Year*</label>
<div class="col-md-7">
<input type="text" id="dischargeYear" name="dischargeYear"
class="form-control large-text-form main-input"
ng-model="vm.registration.dischargeYear"
required
ng-class="{'has-error': form.dischargeYear.$touched amp;amp; form.dischargeYear.$invalid}">
</div>
</div>
</div>
</div>
Это привело к заполнению $validators
и $error
и появлению метки.
Ответ №2:
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body ng-app="">
<form name="myForm">
Click here to make the input field required:
<input type="checkbox" ng-model="setRequired"><br><br>
<input name="name" ng-model="name" ng-required="setRequired">
<h1 ng-if="myForm.name.$invalid">The input field cannot be empty</h1>
</form>
</body>
</html>
Комментарии:
1. В принципе, у меня есть такая настройка, но если она не требуется, она также скрыта. Обратите внимание на
ng-hide
окружающееdiv
.2. означает, что вам нужно скрыть этот div, если это не требуется?