2017-08-16 1 views
0

Le problème est que je veux être en mesure de sélectionner plusieurs cases à cocher, et sur le clic du bouton Test, afficher les cases sélectionnées dans la console. Le problème ici est que je n'utilise qu'une case à cocher qui s'affiche sur plusieurs lignes. Je utilise angulaire 2 avec des composants de conception matériel et le feu angulaire 2.HTML/TypeScript afficher plusieurs valeurs de case à cocher dans angulaire 2

//TypeScript 
 
import { Component, Input, OnInit } from '@angular/core'; 
 
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database'; 
 
import { DataSource } from '@angular/cdk'; 
 

 
@Component({ 
 
    selector: 'waybill-billing', 
 
    templateUrl: './waybillbilling.component.html', 
 
    styleUrls: ['./waybillbilling.component.css'] 
 
}) 
 
    
 

 
export class WaybillBillingComponent implements OnInit { 
 
    checked = false; 
 
    @Input('id') waybillId: string; 
 
    displayedColumns = ['status', 'type', 'articleId', 'description', 'amount']; 
 
    dataSource: FirebaseDataSource; 
 
    
 
    constructor(private db: AngularFireDatabase){} 
 
    
 

 
    ngOnInit(): void { 
 
    this.dataSource = new FirebaseDataSource(this.db, this.waybillId); 
 
    } 
 

 

 
} 
 

 
export class FirebaseDataSource extends DataSource<any> { 
 

 
    items: FirebaseListObservable<any[]>; 
 
    constructor(private db: AngularFireDatabase, private waybillId: string) { 
 
    super(); 
 
    } 
 

 
    connect(): FirebaseListObservable<any[]> { 
 
    this.items = this.db.list('xxx/pieces/' + this.waybillId); 
 
    console.log(this.items); 
 
    return this.items; 
 
    } 
 

 
    disconnect(){ 
 

 
    } 
 
}
//HTML 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="script.js"></script> 
 

 
<div class="example-container mat-elevation-z8"> 
 

 
    <md-table #table [dataSource]="dataSource" class="mat-typography"> 
 

 
    <div> ng-controller="AppCtrl"> 
 
    <ng-container cdkColumnDef="status"> 
 
     <md-header-cell class="body-2" *cdkHeaderCellDef> Status </md-header-cell> 
 
     <md-cell class="body-1" *cdkCellDef="let row"> 
 
     <md-checkbox></md-checkbox> 
 
     </md-cell> 
 
    </ng-container> 
 
    </div> 
 

 
    <!-- Type Column --> 
 
    <ng-container cdkColumnDef="type"> 
 
     <md-header-cell class="body-2" *cdkHeaderCellDef> Type </md-header-cell> 
 
     <md-cell class="body-1" *cdkCellDef="let row"> 
 
     <md-chip-list><md-chip selected="true" color="blue">{{row.type}}</md-chip></md-chip-list> 
 
     </md-cell> 
 
    </ng-container> 
 

 
    <!-- Article Column --> 
 
    <ng-container cdkColumnDef="articleId"> 
 
     <md-header-cell class="body-2" *cdkHeaderCellDef> Art.nr </md-header-cell> 
 
     <md-cell class="body-1" *cdkCellDef="let row"> {{row.articleId}} </md-cell> 
 
    </ng-container> 
 

 
    <!-- Description Column --> 
 
    <ng-container cdkColumnDef="description"> 
 
     <md-header-cell class="body-2" *cdkHeaderCellDef> Beskrivning </md-header-cell> 
 
     <md-cell class="body-1" *cdkCellDef="let row"> {{row.description}} </md-cell> 
 
    </ng-container> 
 

 
    <!-- Amount Column --> 
 
    <ng-container cdkColumnDef="amount"> 
 
     <md-header-cell class="body-2" *cdkHeaderCellDef> kg/st </md-header-cell> 
 
     <md-cell class="body-1" *cdkCellDef="let row"> {{row.amount}} kg </md-cell> 
 
    </ng-container> 
 

 
    <md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row> 
 
    <md-row *cdkRowDef="let row; columns: displayedColumns;"></md-row> 
 
    
 
    
 
    </md-table> 
 
    
 
<button (click)="test()" md-button>Testing</button> 
 
</div>

  1. forte texte
+0

De votre question ce n'est pas très clair ce que vous essayez d'atteindre, surtout pourquoi ne pas mettre plusieurs cases à cocher si vous en avez besoin, qu'est-ce qui vous empêche de le faire? – Vega

+0

Parce que la case à cocher est créée pour chaque ligne de table créée, qui dépend du nombre de lignes dans chaque cas. Le nombre de cases à cocher ne sera jamais le même! – emilogge

+0

alors votre question est comment faire cela? – Vega

Répondre

0

Vous devez garder piste de laquelle checkb Boeufs est vérifié:

<ng-container cdkColumnDef="select"> 
    <md-header-cell *cdkHeaderCellDef> Status </md-header-cell> 
    <md-cell *cdkCellDef="let row"> 
    <md-checkbox (click)="$event.stopPropagation()" 
       (change)="$event ? selection.toggle(row.$key) : null" 
       [checked]="selection.isSelected(row.$key)"> 
    </md-checkbox> 
    </md-cell> 
</ng-container> 

Dans votre code:

import {SelectionModel} from '@angular/material'; 

selection = new SelectionModel<string>(true, []); 

Voici un plunker où vous pouvez probablement trouver quelques bonnes choses pour vos besoins ...

md-table with checkboxes