private atLeastOneValidator = () => {
return (controlGroup) => {
let controls = controlGroup.controls;
if ( controls ) {
let theOne = Object.keys(controls).find(key=> controls[key].value!=='');
if ( !theOne ) {
return {
atLeastOneRequired : {
text : 'At least one should be selected'
}
}
}
}
return null;
};
};
Выше есть многоразовый валидатор, и вы можете использовать его следующим образом:
this.contactForm.setValidators(this.atLeastOneValidator())
Это делает весь contactForm
недействительным, если ни одно из полей не имеет значения.
Обратите внимание, что проверка contactForm
по умолчанию все равно будет работать, и вам не нужно заботиться о количестве полей в вашей форме, и все обрабатывается динамически
EDIT:
Обратите внимание, что atLeastOneValidator
проверяет, чтобы значения не были пустыми, но если вы хотите сказать:
По крайней мере одно из этих полей должно быть valid
, тогда вы можете просто настроить условия так, чтобыниже
let theOne = Object.keys(controls).find(key=> controls[key].valid );
Затем вы можете использовать ошибку в своем шаблоне следующим образом:
<small *ngIf="contactForm.hasError('atLeastOneRequired')" class="mat-text-warn data_light">{{contactForm.getError('atLeastOneRequired')}}
</small>