FormArray очищает значения (но не элементы управления) после нажатия новой FormGroup - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь вставить FormGroup (myGroup) в FormArray (myArray), в котором уже есть группа FormGroups.После нажатия myGroup я регистрирую myArray.value, который тогда состоит только из значения myGroups.НО: myArray.controls по-прежнему содержит все остальные группы formGroups.

Кто-нибудь сталкивался с таким поведением или знает, почему это происходит?Уже искали в Интернете, но не смогли найти ничего связанного.

// at this point the array contains n values and n controls
console.log(this.myArray.value)  

// then I push the new group (result comes from input data of the user)
const myGroup = this.myService.createGroup(result);
(<FormArray>this.myArray).push(<FormGroup>myGroup);

// at this point the array contains only one value, but still n controls
console.log(this.myArray.value);

myService:

createGroup(result: Result) {
  return this.fb.group({
    id: this.fb.control(result.id),
    name: this.fb.control(result.name)
  });
}

Есть несколько вещей, которые могут быть уместны здесь:

  1. Если я обновляю одну из существующих форм FormGroup в myArray с patchValue, она ведет себя как обычно, все работает нормально.
  2. Первоначально я динамически заполняю myArray, используя тот же метод, который я использую позже при нажатии myGroup (createGroup()), которая также работает как ожидалось.
  3. Форма вложенная.Моя текущая структура: myForm -> содержит myParentArray -> содержит myParentGroup -> содержит myArray.
  4. Я изначально создаю всю форму в родительском компоненте с помощью службы, которая возвращает, например,.FormGroups, как myGroup.Затем я передаю FormGroups и FormArrays через @Input () для вложенных компонентов.Но это, по моему мнению, не должно иметь значения.

Я уже пытался обновить значение с помощью .updateValueAndValidity (), но это не работает.

Может быть, есть какие-тоспособ заставить FormArrays обновлять свое значение на основе элементов управления?

1 Ответ

0 голосов
/ 25 июня 2019

Решением в моем случае было просто получить значения с помощью .getRawValue (), как указывал @Eliseo.Но главная ошибка заключалась в том, что в какой-то другой части кода formControls внутри formArray были отключены, что вызвало исходную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...