Angular响应式表单:如何依据布尔数组重置复选框值?
解决Angular FormArray重置复选框状态报错问题
错误原因
你当前的循环写法是逐个给FormArray传入单个布尔值,但FormArray的patchValue方法要求传入与控件数量匹配的数组,而非单个值。当你传入单个布尔值时,Angular内部会尝试调用它的forEach方法(用于遍历数组给每个控件赋值),但布尔值没有这个方法,因此触发TypeError: value.forEach is not a function错误。
正确解决方案
方案一:直接传入整个数组(推荐)
不需要循环,直接把DOList数组传给FormArray的patchValue,它会自动将数组中的每个值对应到对应的复选框控件:
this.selectDataConceptForm.get('dataOwnerList').patchValue(this.DOList, { emitEvent: false });
方案二:逐个控件赋值(适合需要额外逻辑的场景)
如果需要对每个控件做单独处理,可以循环FormArray的控件列表,逐个设置值:
// 先断言为FormArray类型,方便调用at方法 const dataOwnerArray = this.selectDataConceptForm.get('dataOwnerList') as FormArray; this.DOList.forEach((checkedStatus, index) => { dataOwnerArray.at(index).patchValue(checkedStatus, { emitEvent: false }); });
内容的提问来源于stack exchange,提问作者Mitul Panchal
相关产品推荐
相关产品推荐

