Подтвердить что ты не робот

AngularJS: предотвращать проверку скрытых полей формы

Каков наилучший способ предотвращения проверки скрытых полей формы в AngularJS?

4b9b3361

Ответ 1

Сначала я пропустил встроенную директиву ngRequired. Существует также тег required, который меня смутил.

Теперь мы можем использовать ту же логику (которую мы использовали, чтобы скрыть элемент), чтобы установить ngRequired false.

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

<form ng-app name="form">

    Marital status:
    <select  ng-model="maritalStatus" required>
        <option value="">Select...</option>
        <option value="M">Married</option>
        <option value="UM">Unmarried</option>
    </select>

    <div ng-show="maritalStatus == 'M'">
        Number of children: <input type="number" ng-model="children"  ng-required="maritalStatus == 'M'">
    </div>

    (for testing) Is this form correctly filled? {{form.$valid}}

</form>

Ответ 2

Вы также можете полностью добавить или удалить его из DOM/формы, используя ng-if вместо ng-show.

<div ng-show="maritalStatus === 'M'">
    Number of children: <input type="number" ng-model="children"  ng-required="maritalStatus == 'M'">
</div>

к этому

<div ng-if="maritalStatus === 'M'">
    Number of children: <input type="number" ng-model="children"  ng-required="true">
</div>

Ответ 3

Вы можете удалить атрибут required, используя директивы:

<div ng-app="myApp">   
 <input type="backbutton" id="firstName" name="firstName" type="text"  required/>

var app = angular.module('myApp',[]);

app.directive('input',function($compile){
  return {
    restrict:'E',
    compile:function($tElement,$tAttrs){
        console.log("hi there");
      var el = $tElement[0];
      if(el.getAttribute('type')){
        el.removeAttribute('type');
        el.setAttribute($tAttrs.type,'');
        return function(scope){
          $compile(el)(scope);
        }
      }

    }  
  }
});


app.directive('remove',function($compile){
  return {
    restrict: 'A',
    replace:true,
    template:'',
      link: function (scope, element, attrs) {
          element.removeAttr('required');
      }
  }
});

См. Здесь Fidlle

До:

<input id="firstName" name="firstName" required="" remove="" class="ng-scope">

После:

<input id="firstName" name="firstName" remove="" class="ng-scope">