Angular 角度5反应形式-FormArray不工作时的修补值
我在Ionic3框架中有这个反应式表单,我需要用从API检索的数据填充它。为此,我使用了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.
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填充它。我太傻了,再次感谢您。你救了我的命,很高兴我能帮上忙。