以表单组反应形式插入值

时间:2019-12-25 09:45:33

标签: angular angular-reactive-forms formgroups

我有这样的东西

let formGroup = new FormGroup({
  operationalAM: new FormGroup({
    endTime: new FormControl('')
  }),
  operationalPM: new FormGroup({
    startTime: new FormControl('')
  })
});

我试图像这样将值设置为 endTime startTime

formGroup.controls.operationalAM.value.endTime.setValue('1300');
formGroup.controls.operationalPM.value.startTime.setValue('');

但是我有错误

TypeError:formGroup.controls.operationalAM.value.endTime.setValue不是函数

有人知道如何在formGroup内为formGroup设置值吗?

4 个答案:

答案 0 :(得分:3)

您可以在像这样的控件中设置值:

formGroup.controls.get('operationalAM').setValue({ endTime: '1300' });
formGroup.controls.get('operationalPM').setValue({ startTime: '1300' });

您可以使用works like中的patchValue:

  

使用patchValue()方法来替换对象中定义的属性,这些属性在表单模型中已更改。

formGroup.controls.get('operationalAM').patchValue({ endTime: '1300' });

这样,您可以保留引用,但仅更新endTime的值

答案 1 :(得分:1)

应该是

formGroup.controls.operationalAM.controls.endTime.setValue('1300');
formGroup.controls.operationalPM.controls.startTime.setValue('');

答案 2 :(得分:0)

由于在另一个formGroup中有formGroup,因此您必须在内部formGroup中引用控件

formGroup.controls.get('operationalAM.startTime').setValue('1300');
formGroup.controls.get('operationalPM.endTime').setValue('');

第二种方法是使用getter

喜欢

 get startTime(){
  return this.yourform.get('operationalAM.startTime')
 }
 get endTime(){
  return this.yourform.get('operationalPM.endtime')
 }

这将返回控件,然后您可以为

之类的控件设置值
this.yourform.get('endtime').setValue(value);

答案 3 :(得分:0)

您还可以如下使用patchValue方法:

 formGroup.patchValue({
 operationalAM: ({
 endTime:'1'
 }),
operationalPM:({
 startTime:'2'
})
});

您无需在此处指定所有字段,只需指定您需要的字段
来源:此Question