Для этого существует простое решение, например, с использованием только одного асинхронного валидатора.
Например, вы можете сгруппировать все поля, которые мы должны проверять при каждом изменении одного поля в подчиненной форме
и затем примените к ним валидатор.
Пример:
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
для формы, или даже отказаться от использования формы, если хотите.