Angular 角度5反应形式-FormArray不工作时的修补值

Angular 角度5反应形式-FormArray不工作时的修补值,angular,ionic3,angular-reactive-forms,formarray,Angular,Ionic3,Angular Reactive Forms,Formarray,我在Ionic3框架中有这个反应式表单,我需要用从API检索的数据填充它。为此,我使用了patchValue,因为我在某处读到它比setValue更可靠 我面临的问题是,它不会填充重复的表单字段。为了更好地解释,我创造了这个 我也尝试过其他方法,比如直接将数据分配到相应的字段,而不是先使用for循环,但这只填充了1个集合,而不是全部3个集合 有人能指出我做错了什么,或者提供更好的解决方案吗 谢谢您在您的示例中,将主组件上的for循环设置为如下所示 for(const rooms of resp.

我在Ionic3框架中有这个反应式表单,我需要用从API检索的数据填充它。为此,我使用了
patchValue
,因为我在某处读到它比
setValue
更可靠

我面临的问题是,它不会填充重复的表单字段。为了更好地解释,我创造了这个

我也尝试过其他方法,比如直接将数据分配到相应的字段,而不是先使用
for
循环,但这只填充了1个集合,而不是全部3个集合

有人能指出我做错了什么,或者提供更好的解决方案吗


谢谢您

在您的示例中,将主组件上的for循环设置为如下所示

for(const rooms of resp.room_data){

      const roomNumberControl = this.createRooms();
      (<FormArray>this.informationForm.controls.room_numbers).push
      (roomNumberControl);
      console.log(JSON.stringify(rooms));
    }
用于(各房间数据的施工房间){
const roomNumberControl=this.createRooms();
(此。信息表单。控件。房间号)。按
(房间号控制);
log(JSON.stringify(rooms));
}

创建房间只需要在其中包含一些数据,但这将为阵列中的每个人创建一个对象。我过去就是这样做的。

您的代码运行良好。只是您的populate方法创建了新的表单组,并用patchValue()填充它们,但从不将这些新表单组推送到表单数组中。patchValue()并不“更可靠”。它执行与setValue()不同的操作。setValue需要一个完整的新值(表单的每个控件都包含一个新值),而patchValue需要一个部分的新值(表单的一些控件都包含一个新值)。谢谢@JBNizetThank,这很有魅力,但第一个字段为空。你能告诉我怎么解决这个问题吗?从第17行删除这个.createRooms(),当表单初始化时,您正在用一个VAULE填充它。我太傻了,再次感谢您。你救了我的命,很高兴我能帮上忙。