Angular PatchValue не работает с FormArray

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

вот код

 this.purchaseOrderForm.patchValue({
      itemForm: {
        inputSubTotal: this.tempSellPrice.valueOf().toString()
      }

    });

но это не работает

 this.purchaseOrderForm.at(i).patchValue({
      itemForm: {
        inputSubTotal: this.tempSellPrice.valueOf().toString()
      }

    });

тоже не работает, i = количество индексов.

есть ли способ обновить мою форму, не сохраняя ее?


person Mark    schedule 12.08.2019    source источник
comment
Можете ли вы создать стекблиц?   -  person Chellappan வ    schedule 12.08.2019
comment
@Chellappan, вот образец stackblitz.com/edit/angular-c6xqxm   -  person Mark    schedule 12.08.2019


Ответы (2)


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

  onChangeState(i){
    const fg = this.itemsArray.at(i);
    const fgValue = fg.value;
    fg.patchValue({
      total: fgValue.fvalue + fgValue.svalue
    });
  }

вот блиц-демонстрация: https://stackblitz.com/edit/angular-wyly3s?file=src/app/app.component.ts

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

person bryan60    schedule 12.08.2019
comment
черт, ты такой хороший. Это то, что я ищу. Потратил на это 7 часов - person Mark; 12.08.2019

Я взглянул на ваш пример StackBlitz здесь https://stackblitz.com/edit/angular-c6xqxm и я думаю, что нашел проблему. Вы должны вложить [formGroupName]="1" в дочерний элемент *ngFor

Вместо

<div *ngFor="let group of itemsArray.controls; let i = index;" [formGroupName]="i"> 

    //your code...      

</div>

пытаться

<div *ngFor="let group of itemsArray.controls; let i = index;" >
  <div [formGroupName]="i"> <----------

    //your code...

  </div>
</div>
person William Stevens    schedule 12.08.2019