Угловая пользовательская проверка полей FormArray (Реактивная форма)

0

Вопрос

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

Форматирование является динамическим, в котором вы можете перемещать или удалять элементы группы форм. Группа форм состоит из полей 1, 2, 3. Если одно из полей не равно нулю, остальные поля должны быть заданы с помощью валидаторов.обязательно. Форма будет действительна, если все поля либо пусты, либо заполнены.

Спасибо.

Ниже приведен пример кода:

formA!: FormGroup;

initializeForm(): void {
    this.formA = this.fb.group({
      item1: this.fb.array([this.createItem1()]),
      item2: this.fb.array([this.createItem2()]),
    });
  }

createItem1(): FormGroup {
   return this.fb.group({
       field1: null,
       field2: null,
       field3: null,
   });
}

1

Лучший ответ

0

Попробуй это.

createItem1(): FormGroup {
  const fg = this.fb.group({
      field1: null,
      field2: null,
      field3: null,
  });
   
  const validatorFn = (control: AbstractControl): { [key: string]: any } | null => {
    const obj = fg.getRawValue();
     
    if (obj.field1 || obj.field2 || obj.field3) {
      return Validators.required(control);
    }
     
    return null;
  };
   
  for (const control of Object.values(fg.controls)) {
    control.setValidators(validatorFn);
  }

  return fg;
}

Также вам нужно будет выполнить updateValueAndValidity() для всех элементов управления при нажатии клавиши.

2021-11-25 00:55:40

Привет, я столкнулся с приведенным ниже в "fg.controls", когда пытался это сделать. можно посоветовать? Тип "{ [ключ: строка]: Абстрактный контроль;} "должен иметь метод" [Symbol.iterator] ()", который возвращает итератор.ts(2488)
braveducky

Исправил свой ответ. Пожалуйста, проверьте еще раз.
N.F.

Привет, спасибо за помощь. Я внес некоторые изменения, соответствующие моему варианту использования, и добавил дополнительное условие для очистки валидаторов, когда это не требуется. В целом, в конце концов, все получается.
braveducky

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................