2017-12-29 7 views
-1

Ich habe eine Tabelle, und wenn ich auf eine Zeile klicke, möchte ich eine andere Zeile darunter anzeigen (mit einigen Informationen über diese Zeile). Ich weiß nicht, wie man es umschalten kann, aber auch mehrere Unterreihen öffnen zu können. Irgendwie muss ich das Umschalten basierend auf der Zeilen-ID aktivieren, das ist es, was ich herausgefunden habe, aber es funktioniert nicht wirklich so, wie ich es brauche.Toggle Zeile basierend auf ID - Angular 4

<ng-container *ngFor=" let fields of mf.data; let i = index"> 
    <tr> 
    <td (click)="expandCompareRow(i)">Something</td> 
    <td>Something</td> 
    </tr> 

    <tr *ngIf="compareRowExpanded == i && expandedRow"> 
    <td>Something</td> 
    <td>Something</td> 
    </tr> 
    </ng-container> 

    TS: 
    expandCompareRow(index) { 
     this.compareRowExpanded = index; 
     this.expandedRow = !this.expandedRow; 
     } 

Dies eröffnet eine Reihe, aber wenn ich ein anderes zu öffnen, es schließt zuerst die Zeile, die bereits geöffnet wird, dann wieder ich muss Sie auf diese Zeile zu öffnen.

+0

Wenn Sie Ein 'compareRowExpanded' in Ihrer Komponente, dann kann natürlich nur eine Zeile erweitert werden. Sie möchten, dass jede Zeile erweitert wird oder nicht. Fügen Sie also Ihrem Row-Objekt ein erweitertes Flag hinzu. Und benutze '* ngIf =" row.expanded "' und '(click) =" row.expanded =! Row.expanded "' –

Antwort

2

ein expanded Grundstück mit dem Objekt verwenden und wechseln Sie zwischen ihnen wie unten

<ng-container *ngFor=" let fields of mf.data; let i = index"> 
    <tr> 
    <td (click)="expandCompareRow(fileds)">Something</td> 
    <td>Something</td> 
    </tr> 

    <tr *ngIf="fields.expanded"> 
    <td>Something</td> 
    <td>Something</td> 
    </tr> 
</ng-container> 

Typoskript Code

expandCompareRow(fields) { 
    fields.expanded = ! fields.expanded; 
    } 

Sie können es auch tun, ohne das Verfahren

<td (click)="fields.expanded = ! fields.expanded">Something</td> 
Verwandte Themen