You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中FormArray调用setValue时报value.forEach不是函数错误

问题解决:Angular表单setValue触发value.forEach is not a function错误

错误原因

调用setValue时,你给titleList传入了FormArray实例,但setValue要求传入的是表单对应的原始数据值(比如普通数组),而非表单控件实例。Angular尝试对这个FormArray实例执行数组的forEach方法,因此触发报错。

解决方案

1. 修改mock数据为原始值类型

将mock中的titleList从new FormArray([])改为普通数组:

const mock = { 
  title: {
    titleList: [], // 空数组,对应空的FormArray
    name: 'Movie one',
    // 其他表单元素...
  }
};

formService.get().setValue(mock);

如果需要给titleList设置初始项,根据实际表单项结构传入对应原始值数组即可。比如每个titleList项是带itemName字段的表单组,就传:

const mock = { 
  title: {
    titleList: [{ itemName: 'First Item' }, { itemName: 'Second Item' }],
    name: 'Movie one',
    // 其他表单元素...
  }
};

2. 测试中动态添加FormArray项(可选)

如果需要模拟点击“新增名称”后的状态,可以先通过setValue设置基础值,再获取FormArray实例手动添加控件:

// 先设置基础表单值
formService.get().setValue({
  title: {
    titleList: [],
    name: 'Movie one',
    // 其他表单元素...
  }
});

// 获取titleList对应的FormArray
const titleListArray = formService.get().get('title.titleList') as FormArray;
// 根据实际表单结构添加项,比如添加一个表单控件或表单组
titleListArray.push(this.fb.control('New Added Title'));

内容的提问来源于stack exchange,提问作者sebi.schneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:20:24