Любой простой способ применить одно правило проверки ко всем полям с помощью Angular 6 - PullRequest
0 голосов
/ 12 ноября 2018

Предположим, что модель данных содержит 20 строковых полей с разными именами («имя», «адрес», «компания» и т. Д.), Сопоставленных с угловым интерфейсом как 20 полей ввода.Теперь требование просит проверить все поля, которые запрещают пользователю отправлять форму, если какие-либо поля содержат специальные символы.

Я могу разработать шаблон регулярного выражения, но мне просто интересно, есть ли простой способ сделать один валидатор для всех полей.

1 Ответ

0 голосов
/ 12 ноября 2018

Для этого существует простое решение, например, с использованием только одного асинхронного валидатора.

Например, вы можете сгруппировать все поля, которые мы должны проверять при каждом изменении одного поля в подчиненной форме и затем примените к ним валидатор.

Пример:

this.mySubForm = this.fb.group({
    field1: ['', [Validators.required]],
    field2: ['', [Validators.required]],
    ...
    field20: ['', [Validators.required]]
}, this.validatorAllFields.bind(this)

   });

И определить асинхронный валидатор следующим образом:

validatorAllFields(control: FormGroup): any {
  if (control) {
      if(control.value.field1 don't contain special char … &&
         control.value.field2 don't contain special char … &&
         …
         control.value.field20 don't contain special char &&)
         //validation is ok in this case
         return null;
      else
         //validation fails here...
         return {'formInvalid': 'true'}
  } else {
      return null;
    }
  }

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

Вы можете использовать formGroupName для формы, или даже отказаться от использования формы, если хотите.

...