Je me demande comment je cible les lignes paires/impaires à l'intérieur d'un Angular Material Table
afin de pouvoir définir une couleur d'arrière-plan différente pour les lignes paires/impaires.
J'ai configuré ma classe ClaimFileHistoryDataSource
:
claimClientInformation: ClaimFileHistory[];
dataSource : ClaimFileHistoryDataSource;
displayedColumns = ['TypeImg', 'Description', 'Agent'];
export class ClaimFileHistoryDataSource extends DataSource<ClaimFileHistory> {
constructor(private _claimFileHistory: ClaimFileHistory[]) {
super();
}
connect(): Observable<ClaimFileHistory[]> {
return Observable.of(this._claimFileHistory);
}
disconnect() {}
}
Sur NgInit
, je fais un appel à mon service pour obtenir les données dont j'ai besoin et renseigner la DataSource
:
this._claimFileHistoryService.getClaimFileHistoryById().subscribe(response => {
this.claimClientInformation = response;
this.dataSource = new ClaimFileHistoryDataSource(this.claimClientInformation);
});
C'est bien et les données reviennent comme il se doit.
Dans le code HTML, le Mat-Table
ressemble à ceci:
<mat-table #table [dataSource]="dataSource">
<ng-container matColumnDef="TypeImg">
<mat-cell *matCellDef="let row"><img [src]='row.TypeImg' height="40px"></mat-cell>
</ng-container>
<ng-container matColumnDef="Description">
<mat-cell *matCellDef="let row">
<div>
<span class="d-block">{{row.Description}}</span>
<span class="d-block">{{row.Date}}</span>
</div>
</mat-cell>
</ng-container>
<ng-container matColumnDef="Agent">
<mat-cell *matCellDef="let row"> {{row.Agent}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
Encore une fois, je me demandais comment faire pour obtenir les lignes impaires/paires du tableau et leur attribuer une couleur d'arrière-plan différente.
Utilisez CSS suivant dans votre fichier .css ou .scss pour définir un style différent pour la ligne paire/impair:
.mat-row:nth-child(even){
background-color:red;
}
.mat-row:nth-child(odd){
background-color:black;
}
Mise à jour de cette réponse avec une approche plus récente pour les futurs développeurs qui pourraient venir à cette question.
Material Angular propose désormais des variables pour les index de lignes.
<mat-row *matRowDef="
let row;
let even = even;
columns: displayedColumns;"
[ngClass]="{gray: even}"></mat-row>
Dans votre fichier CSS: .gray { background-color: #f5f5f5 }
Il existe d'autres propriétés telles que: index
, count
, first
, last
, even
et odd
.
Vous pouvez en savoir plus sur Docs angulaires , plus précisément dans la section "Tableau montrant les propriétés de chaque contexte de ligne"
Vous pouvez également appliquer des couleurs aux lignes en fonction de la condition.
Par exemple, si la valeur de la cellule est égale à 100, modifiez la couleur de la ligne en rouge.
<tr class="matheader-row" mat-row *matRowDef="let row; columns: displayColumns;
let i = index; let even = even;" [class.rowStyle]="row['myColumn']=='100'"
[ngClass]="{rowcolor: even}">
</tr>
css
.rowStyle{
background-color:red;
font-weight: bold;
}
Le scénario ci-dessus fonctionnera si l'une des colonnes de votre colonne est myColumn . En utilisant également la propriété even, vous pouvez appliquer le style de couleur requis [ngClass]="{rowcolor: even}