Angular中如何将数组项正确推送至FormGroup的FormArray属性?API数据绑定格式异常修正
解决FormArray绑定为字符串数组的问题
你现在的问题出在用FormGroup来包装数组元素了——this.fb.group(frequencyInterval)会把数组的索引作为键、元素作为值,生成一个类似{"0":"5", "1":"4"}的对象,而我们需要的是直接把每个字符串作为独立的FormControl加入FormArray。
修正后的代码
把你处理frequencyInterval的代码改成这样:
// 拆分并清理API返回的字符串 const intervalItems = schedules.frequencyinterval.split(',').map(item => item.trim()); // 获取FormArray控件 const fInt = this.scheduleParentModel.controls.frequencyInterval as FormArray; // 先清空数组(防止重复绑定数据时累积旧值) fInt.clear(); // 遍历每个元素,创建FormControl并加入FormArray intervalItems.forEach(item => { fInt.push(this.fb.control(item)); });
为什么原来的写法不对?
FormGroup是用来处理键值对结构的表单数据(比如包含多个字段的对象),当你把数组传给fb.group()时,它会把数组的索引当作键,元素当作值,所以生成了{"0":"5", "1":"4"}这样的结构。- 而
FormArray需要的是一组FormControl(或嵌套的FormGroup/FormArray),对于单纯的字符串数组,每个元素对应一个FormControl就可以了,这样FormArray的value就会是你期望的["5","4","3","2","1"]。
补充:初始化FormArray的建议
如果你的frequencyIntervalFormArray不需要初始值,保持空数组是没问题的;如果需要默认值,也可以在定义FormGroup的时候直接用fb.array([]),和你现在的写法一致。
内容的提问来源于stack exchange,提问作者Rasik
相关产品推荐
相关产品推荐

