如何删除 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);
}
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);
}