2016-04-07 21 views
13

角度2のアプリに変換しようとしています。ブールのギザギザの配列をループします(boolean[][])。私は、次のコードでcheckboxesをレンダリングしています:チェックボックスが正しく表示さ角度2 ngModelはネストされたngでバインドします

<div *ngFor="#cell of CellData; #parentIndex = index"> 
    <input *ngFor="#col of cell; #childIndex = index" type="checkbox" [(ngModel)]="CellData[parentIndex][childIndex]" />  
</div> 

私は、チェックボックスを選択した場合、しかし、それの右に1も選択されています。

このロジックはので、私はそれがすべてのヘルプははるかに高く評価されるだろう、私はngModelまたは角2

の問題を使用しています方法に問題だかはわからないアンギュラ1つのアプリで正常に動作します

+0

も参照してください? –

+2

このplunkr https://plnkr.co/edit/BbZxbAS0jNafAfI6slq9?p=preview、@Gunterを参照してください。関連したものがアップデートに対応していますが、ビューが非同期になっています... –

+0

最初に取得したばかりです。 –

答えて

17

更新

ngForTrackByを使用する公式の方法は

 <input 
      *ngFor="let col of cell; let childIndex=index; trackBy:customTrackBy" 
      type="checkbox" 
      [(ngModel)]="CellData[parentIndex][childIndex]" />  
のようです

詳細

ノートtrackBy:customTrackByあなたはこのために*ngForTrackByを使用することができます

:ためhttp://angularjs.blogspot.co.at/2016/04/5-rookie-mistakes-to-avoid-with-angular.htmlを参照してください:デフォルトのトラックによって角度

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div *ngFor="let cell of CellData; let parentIndex = index"> 
     <input 
      *ngFor="let col of cell; let childIndex = index" type="checkbox" 
      *ngForTrackBy="customTrackBy" 
      [(ngModel)]="CellData[parentIndex][childIndex]" />  
    </div> 

    Data:<br/><br/> 
    {{CellData | json}} 
    ` 
}) 
export class AppComponent { 
    constructor() { 
    this.CellData = [ 
     [ true, false, true, false ], 
     [ false, true, false, true ] 
    ] 
    } 

    customTrackBy(index: number, obj: any): any { 
    return index; 
    } 
} 

オブジェクトのアイデンティティが、異なるtrueおよびfalseは同じ身元を持っています。なし*ngForTrackBy角ループはどのtrueまたはfalseがどの位置にあるかを追跡します。 *ngForTrackBy="customTrackBy"では、*ngForはオブジェクトIDの代わりにインデックスを使用します。

Plunker example

あなたが問題を示していPlunkerを提供することができます

関連する問題