Angular 从ControlArray中删除多个控件

Angular 从ControlArray中删除多个控件,angular,Angular,我有一个ControlArray,在某个时候我需要从中删除多个项目,或者更简单的是,只需清除/清空整个数组 这是当前阵列: let myControls = new ControlArray([]); // Add some items to this array : for(let i = 0 ; i<5 ; i++){ myControls.push({ firs

我有一个ControlArray,在某个时候我需要从中删除多个项目,或者更简单的是,只需清除/清空整个数组

这是当前阵列:

       let myControls = new ControlArray([]);
       // Add some items to this array : 

          for(let i = 0 ; i<5 ; i++){
                myControls.push({
                    firstName : new Control( '' , Validators.required ) ,
                    lastName  : new Control( '' , Validators.required ) ,
                })
           }

       // After this my controlArray has 5 controls and 
       //everything works in the view properly .
现在我有一个按钮,它绑定了一个点击事件,我想清除myControls中的所有控件,但我找不到解决方案

在文档中,有一个myControl.removateIndex函数,它只删除一个项目,但没有任何函数删除所有项目

此外,我也尝试过:

          for(let i = 0 ; i<myControls.length ; i++){
                myControls.removeAt(i);
           }
但是很明显这是行不通的,因为每次你从数组中删除一个项目,索引都会改变


提前感谢。

我还没有检查是否有更好的解决方案,但这也应该有效:

while(myControl.length) {
  myControls.removeAt(0);
}

我没有检查是否有更好的解决方案,但这也应该有效:

while(myControl.length) {
  myControls.removeAt(0);
}

没有太多相关的角度,但通常在循环中拼接数组时,您希望使用计数器返回,以便下一个索引i-仍然引用数组中的原始元素

for(var i=myControls.length;i-->0;){
    myControls.removeAt(i);
}

没有太多相关的角度,但通常在循环中拼接数组时,您希望使用计数器返回,以便下一个索引i-仍然引用数组中的原始元素

for(var i=myControls.length;i-->0;){
    myControls.removeAt(i);
}

但是看起来非常粗糙。:,我希望Angular团队会考虑到这一点。你可以尝试其中一个我自己不积极使用JS或TS的方法。事实上,它们都与此无关,因为所有这些都涉及数组本身,但在这里,myControl不是数组,它有一个名为removeAt的特殊函数。数组位于控件内部。但同样,到目前为止,您的答案是最好的方法,除非Angular团队向该元素添加removeAll函数。再次感谢。你是我发现的最优雅、最高效的方式,冈特你再次成为我的保护人:DLooks非常黑客。我希望Angular团队能想到这一点。你可以尝试其中一种,我自己不积极使用JS或TS,但事实上它们都与此无关,因为所有这些都涉及数组本身,但在这里,myControl不是数组,而是一个名为removeAt的特殊函数。数组位于控件内部。但同样,到目前为止,您的答案是最好的方法,除非Angular团队向该元素添加removeAll函数。再次感谢。你是我所发现的最优雅、最高效的方式,冈特。你再次成为我的储蓄者:d ControlArray似乎有一个公共控件:AbstractControl[]属性。查看代码,ControlArray特定的方法直接使用此数组。我认为执行myControls.controls=[]或myControls.controls.length=0是合法的,并得到认可。ControlArray似乎有一个公共控件:AbstractControl[]属性。查看代码,ControlArray特定的方法直接使用此数组。我想这样做是合法的,并且得到了认可,可以执行myControls.controls=[]或myControls.controls.length=0。