динамически изменять проверку элементов управления формой и немедленно применять новую проверку в угловых реактивных формах

#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. Я сделал это и сработало для меня. спасибо @обратный вызов