#angular #validation #angular-reactive-forms
#angular #проверка #angular-reactive-forms
Вопрос:
У меня есть несколько форм, и мне нужна пользовательская проверка входных данных # form2 на основе пользовательского выбора # form1. Я написал пользовательскую проверку (она еще не завершена).
Пользовательский валидатор:
@Injectable()
export class Checks {
constructor(public prescConfigService: PrescConfigService) { }
validity(section, key: string): ValidatorFn | null {
const condition = this.prescConfigService.getDefaultSetting(section, key);
if (!condition) {
console.log('if there is no condition (not selected): ', condition);
return (control: AbstractControl): { [key: string]: boolean } | null => {
console.log('control1: ', control);
return null;
};
} else {
console.log('elseeeee', condition);
return (control: AbstractControl): { [key: string]: boolean } | null => {
console.log('control2: ', control);
return { 'required': true };
};
}
}
}
создание form2:
this.form = this.fb.group({
NationalNum: [this.prescConfigService.getValueByField('CustomerNationalNum'), {
validator: [this.checks.validity('insurance', 'CheckNationalNum')],
updateOn: 'change'
}],
BirthDateJalali: [this.prescConfigService.getValueByField('BirthDate'), Validators.required],
Cellphone: [this.prescConfigService.getValueByField('Cellphone'), Validators.required],
Sex: [this.prescConfigService.getValueByField('SexID'), Validators.required],
});
Все, что мне нужно, это чтобы пользовательская проверка применялась, когда пользователь изменяет выбор из #form1 (который находится в другом компоненте). Есть ли вообще?
Комментарии:
1. Создайте тему, которая будет отслеживать изменения, происходящие в компоненте 1 для этого конкретного выпадающего списка, затем в компоненте 2 подпишитесь на эту тему и создайте переменную внутри этой подписки. Затем в вашем валидаторе просто выполните свое условие на основе этой переменной.
2. Я сделал это и сработало для меня. спасибо @обратный вызов