如何删除 FormArray 的所有元素但一个特定索引?

How to remove all elements of a FormArray but one specific index?

Angular中是否有任何内置功能,以便我可以说:

remove all FormArray elements except at index 2

可能是其他库中已知的“RemoveRange”之类的东西?

Angular 中没有内置方法来实现这一点。 一种可能性是使用 slice()itemIndex 处仅保留一个数组项,并在使用 clear() 方法(在 Angular 8+):

const arrayValue = this.form.get('myArray').value;
this.form.get('myArray').clear();
this.form.get('myArray').push(this.fb.control(arrayValue.slice(itemIndex, itemIndex + 1)[0]));

这样的东西行不通:

formArray = new FormArray([formArray.at(index)]);

编辑:

不,它不会很好地工作,因为正如@yurzui 所说,FormArray 将失去与父控件的连接。所以@nash11 的回答是正确的。

作为已接受答案的补充,我想指出的是,在有人订阅了任何已删除成员的更改的情况下,订阅仍然有效,从而导致内存泄漏。

Example以上情况

Angular 没有内置此功能。您可以改为存储所需的值,clear formArray,然后将存储的值推回现在空的 formArray

keepOnly(index: number) {
  const valueToKeep = this.formArray.at(index);
  this.formArray.clear();
  this.formArray.push(valueToKeep);
}