Проверка условного поля в Angular 6+ в зависимости от значения поля выбора - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь сделать необязательные поля, которые требуются только для определенных значений в поле выбора.Я думал, что был близок, но значение не заполнялось во время проверки.

requiredForTypeValidator = 
    (values) => 
        (control: any): {[key: string]: boolean} | null => {

    const ticket_type = control.parent ? control.parent.value.type : '';
    if (control.value !== undefined && ((control.value === null || control.value.length < 1) && values.indexOf(ticket_type) !== -1)) {
        return {'required': true};
    }
    return null;
}

 ngOnInit() {
    this.createTicketForm = this.formBuilder.group({
        type: [null, Validators.required],
        optField: [null, this.requiredForTypeValidator(['validate_me','validate_me_too'])],
    });
 }

По запросу я воссоздал эту проблему на stackblitz: https://stackblitz.com/edit/angular-nt8hjw

1 Ответ

0 голосов
/ 29 января 2019

Здесь у вас есть рабочее решение для вашей проблемы stackblitz .

По сути, я создаю новую функцию, которая подписывается на выпадающие изменения и обновляет валидаторы для зависимого поля.

private setValidators(): void {
    this.createTicketForm.get('type').valueChanges.subscribe(
    (result) => {
      if ( result ==='Check me') {
        this.createTicketForm.get('optField').setValidators(Validators.required);
        console.log('validator set');
      } else {
        this.createTicketForm.get('optField').setValidators(null);
      }
      this.createTicketForm.get('optField').updateValueAndValidity();
    }
   );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...