【发布时间】:2019-10-17 23:05:25
【问题描述】:
如果我尝试在 FormArray 为空时设置 FormArray 值:
const array1 = new FormArray([]);
array1.setValue(['']);
我收到此错误:
还没有向该数组注册的表单控件。如果您使用的是 ngModel,您可能需要检查下一个刻度
如果我在有 1 的时候加 2:
const array2 = new FormArray([new FormControl('')]);
array2.setValue(['', '']);
我收到以下错误:
在索引 1 处找不到表单控件
如果我尝试在有 2 时设置 1:
const array3 = new FormArray([new FormControl(''), new FormControl('')]);
array3.setValue(['']);
我收到以下错误:
必须在索引处为表单控件提供一个值:1。
问题:如何编写一个函数来更新具有任意长度列表的表单数组的值?
StackBlitz:https://stackblitz.com/edit/angular-wduzv9?file=src/app/app.component.ts
*编辑
我知道我可以使用push()、at() 和removeAt(0) 方法。我正在寻找一个通用功能。它可以使用任何你想要的方法。
【问题讨论】:
-
你为什么要这样做?
-
@Chellappan 在一种情况下,我将值与另一个控件同步。另一方面,有条件地插入默认值,然后在 FormControl 级别进行更新。不过这有关系吗?
-
FormArray 是基于索引的,您应该使用 at 方法访问,例如 array2.at(0).setValue(['']);
-
@Chellappan 是的,我完全理解并理解这一事实。你有答案吗?
-
试试这个array2.reset(['','''])
标签: angular typescript angular-reactive-forms