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

Проверка невидимых и отключенных полей в AngularJS

Есть ли способ сделать условную проверку в AngularJS? Проблема, которую я пытаюсь решить, - это в основном список переключателей, которые включают/отключают входы на основе выбора. На следующем изображении изображена проблема. Первый ввод текста принимает только буквы, второй - только числа. Оба имеют ng-pattern и ng-required. (Рабочий пример на Plunker)

Screenshot of the problem in question

Что бы я хотел достичь, так это то, что при выборе переключателя проверка будет отключена для соответствующего поля ввода.

Я надеялся, что установка ng-disabled в true приведет к тому, что недопустимое состояние будет установлено для элементов управления формы, о которых идет речь, но, увы, это не так.

Единственное решение, которое я нашел до сих пор, заключается в очистке ввода при выборе другого выбора и установке ng-required в false. Есть ли разумный способ достижения этого или единственное решение полностью удалить элементы из DOM?

4b9b3361

Ответ 1

Попробуйте эту директиву:

.directive('disableChildren', function() {
  return {
    require: '^form',
    restrict: 'A',
    link: function(scope, element, attrs,form) {
      var control;

      scope.$watch(function() {
        return scope.$eval(attrs.disableChildren);
      }, function(value) {
        if (!control) {
          control = form[element.find("input").attr("name")];
        }
        if (value === false) {
          form.$addControl(control);
          angular.forEach(control.$error, function(validity, validationToken) {
            form.$setValidity(validationToken, !validity, control);
          });
        } else {
          form.$removeControl(control);
        }
      });
    }
  }
})

DEMO

За дополнительной информацией и объяснением того, как это работает. Проверьте мою аналогичную директиву для исключения скрытых элементов из проверки:

реализация директивы для исключения скрытого элемента ввода из проверки ($ addControl)

Я думаю, мы могли бы каким-то образом объединить эти директивы, чтобы создать общую директиву, которая может использоваться повсюду в зависимости от того, как мы оцениваем выражение.

Ответ 2

Как предполагает мармит, ng-required может принимать выражение, чтобы вы могли сказать что-то вроде

<input name="numeric" ng-required="alpha.disabled == false" />
<input name="alpha" ng-required="numeric.disabled == false" />

Я не уверен, как проверить состояние отключенного - это должно это сделать, но я только когда-либо создавал этот эффект, проверяя состояние флажка.

Я понимаю, что это сообщение Лазаря, но, надеюсь, это поможет другим.

Ответ 3

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