2016-07-04 15 views
1

新規:角度2 &すべて選択/選択解除を作成しようとしています。私はこのようなテーブルを持っている:角度2のすべての機能を選択/選択解除します

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" name="selectAll"></th> 
      <th>Name</th> 
      <th>Number</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox"></td> 
      <td>abc</td> 
      <td>9876373773</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox"></td> 
      <td>abc</td> 
      <td>9876373773</td> 
     </tr> 
     <tr> 
      <td><input type="checkbox"></td> 
      <td>abc</td> 
      <td>9876373773</td> 
     </tr> 
    </tbody> 
</table> 

ユーザーがのSelectAllチェックボックスをクリックするのであれば、他のチェックボックスをチェックしに取得する必要があります。データが動的に来て、ここに私のAPIコールは次のとおりです。Angular2で

this.contactService.getName(this.pageNumber, this.pageSize) 
     .subscribe(
     data => { 
      this.contactlist = data.results; 
     }, 
     err => console.error(err), 
     () => console.log('Contact list fetched') 
    ); 

答えて

1

データ駆動型テーブルでは、行モデルの "checked"フラグを更新することでこれを実現できます。コンポーネントで

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" name="selectAll" [checked]="toggle" (change)="toggleAll()"></th> 
      <th>Name</th> 
      <th>Number</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr *ngFor="let item of items"> 
      <td><input type="checkbox" [checked]="item.checked" (change)="toggleItem(item)"></td> 
      <td>{{ item.name }}</td> 
      <td>{{ item.number }}</td> 
     </tr> 
    </tbody> 
</table> 

そして:これは手動ですべてのチェックボックスをチェックするときにも、ケースを処理し、それが自動的にcheckAllを確認することが重要であることを

toggle = false 

items = [ 
    { name: 'aaa', number: '3452342343' }, 
    { name: 'aaa', number: '3452342343' } 
] 

toggleItem(item) { 
    item.checked = !item.checked 
    this.toggle = this.items.every(item => item.checked) 
} 

toggleAll() { 
    this.toggle = !this.toggle 
    this.items.forEach(item => item.checked = this.toggle) 
} 

注たとえば、あなたがこのような何かを行うことができますチェックボックス。そして逆も同様です。

デモ:http://plnkr.co/edit/Nw8Wk0kXSbQLkAE7yW0e?p=info

1

好ましい方法は次のようにDOMを、モデルにHTMLをバインドモデルを更新し、角度の更新をさせることです。

@Component({ 
    selector: 'my-comp', 
    template: ` 
<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" name="selectAll" (click)="toggleAll($event.target.checked)"></th> 
      <th>Name</th> 
      <th>Number</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr *ngFor="let item of contactlists let i=index"> 
      <td><input type="checkbox" [(ngModel)]="checkedItems[i]"></td> 
      <td>{{item.name}}</td> 
      <td>{{item.value}}</td> 
     </tr> 
    </tbody> 
</table> 
`)} 
export class MyComponent { 
    constructor() { 
    this.contactService.getName(this.pageNumber, this.pageSize) 
     .subscribe(
     data => { 
      this.contactlist = data.results; 
      this.checkedItems = new Array(this.contactlist?.length).fill(false); 
     }, 
     err => console.error(err), 
     () => console.log('Contact list fetched') 
    ); 
    } 
    /* data set dynamically from `contactService` instead according to updated question 
    items = [ 
    {name: abc, number: 9876373771, checked: false}, 
    {name: def, number: 9876373772, checked: false}, 
    {name: ghi, number: 9876373773, checked: false}, 
    ]; */ 

    toggleAll(checked) { 
    this.items.forEach((item) => item.checked = checked); 
    } 
} 
+0

返事のおかげで、しかし、どのような私のデータを動的に来ていると、それはJSONにオブジェクトをチェックしていない場合は。 –

+0

同じ数の項目で異なる変数 'itemsStatus'を作成し、そこに' checked'ステータスを維持することができます。 –

+0

申し訳ありませんが私に例を教えてください?、私は私が書いたAPI呼び出しで質問を編集したことを確認してください –

関連する問題