2016-04-25 9 views
1

私はControlArrayを持っていますが、ある時点で複数の項目を削除する必要があります。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があります。 removeAt(index) 1つのアイテムだけを削除する機能ですが、すべてのアイテムを削除する機能はありません。

また、私はこれを試してみた:

  for(let i = 0 ; i<myControls.length ; i++){ 
       myControls.removeAt(i); 
      } 

しかし、明らかにあなたは、配列から項目を削除するたびので、この文句を言わない作業を、インデックスが変更されます!

ありがとうございます。

+0

配列内の元の要素を参照してくださいなるように、あなたのカウンターで、' ControlArray'は '公共のコントロールを持っているようです。コードを見ると、 'ControlArray'固有のメソッドはこの配列を直接使用しています。 'myControls.controls = []'または 'myControls.controls.length = 0'を行うことは合法であり、承認されていると思います。 –

答えて

5

よりよい解決策がある場合は、私がチェックしていませんが、これは同様に動作するはずです:あなたは後方に行きたいループ内で配列を継ぐているとき

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

これは私の問題を修正した、感謝Gunter。 –

+0

素晴らしい:) 。 。 。 .. –

+0

非常にハッキリに見えます。:)私はAngularチームがこれについて考えてくれることを望みます。 –

2

ずっと通常の角度関連ではなく、 AbstractControl [] `プロパティ:次のインデックスi--はまだ

for(var i=myControls.length;i-->0;){ 
    myControls.removeAt(i); 
} 
関連する問題