Angular Custom Form Validator использовать другие контроллеры - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь реализовать пользовательский валидатор для моей Angular 9 формы. Проверка немного сложна.

Поскольку пара полей зависит от выбора выбранного входа.

Например, если я выбираю один из моих вариантов выбора, требуется поле формы 3.

Но если я выберу второй вариант, потребуется поле формы 5.

Вот почему я написал собственный валидатор:

export class FormComponent {
  public form: FormGroup = new FormGroup({
    ...
    selectField: new FormControl(null, [Validators.required]),
    ...
    formField3: new FormControl(null, [this.validatorArtAende]),
    formField4: new FormControl(),
    formField5: new FormControl(null, [this.validatorArtAender])
  });

  validator (control: AbstractControl) => {
    if (this.form.value.selectField === 'option1' && control.value.length === 0) {
      return { required: true };
    }
    return null;
  }
}

Проблема в том, что this.form unknwon (Невозможно прочитать свойство 'form' из undefined). Так есть ли возможность передать форму или значение другого элемента управления в пользовательский валидатор?

1 Ответ

1 голос
/ 17 апреля 2020

Согласно документации, AbstractControl имеет свойство Parent. Вы должны быть в состоянии использовать это, чтобы перейти к вашему родителю FormGroup, а затем к selectField внутри вашего валидатора.

validator (control: AbstractControl) => {
  if (control.parent && control.parent.controls['selectField'] === 'option1' && control.value.length === 0) {
    return { required: true };
  }
  return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...