Возможно, вам придется использовать пользовательский валидатор.
Создать директиву, как показано ниже:
import {
FormGroup,
ValidationErrors,
ValidatorFn,
Validators,
} from '@angular/forms';
export const atLeastOne = (validator: ValidatorFn, controls:string[] = null) => (
group: FormGroup,
): ValidationErrors | null => {
if(!controls){
controls = Object.keys(group.controls)
}
const hasAtLeastOne = group && group.controls && controls
.some(k => !validator(group.controls[k]));
return hasAtLeastOne ? null : {
atLeastOne: true,
};
};
formBuilder должен выглядеть следующим образом:
return this.fb.group({
department: [''],
phone: [''],
email: [
'',
Validators.compose([
Validators.pattern(/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,15})$/)
])
],
}, { validator: atLeastOne(Validators.required, ['email','phone']) })
Используя эту директиву, вы можете проверить, действительны ли они или нет.
Это можно использовать и в любых других формах.
Вот пример рабочего примера валидатора:
Рабочая демонстрация как минимум одного валидатора
Вы можете изменить это в соответствии с вашими требованиями.