Angular PatchValue不适用于FormArray

时间:2019-08-12 15:41:43

标签: angular forms angular-reactive-forms formarray

我正在尝试修补一个值,以便我的输入像ng模型一样工作

这是代码

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

    });

但这不起作用

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

    });

也不起作用,我=索引计数。

是否可以在不保存表单的情况下更新我的表单?

2 个答案:

答案 0 :(得分:1)

不幸的是,您不能直接在表单数组上修补或设置值,您需要在其中修补或设置表单组/控件的值,例如:

  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

我不能在不知道您正在使用的表单的真实结构的情况下说出您的问题代码中到底有什么问题

答案 1 :(得分:0)

我在https://stackblitz.com/edit/angular-c6xqxm处查看了您的StackBlitz示例,我认为已经找到了问题。您必须将[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>