Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alternate row colours angular material table

I am wondering how I target the even/odd rows inside a Angular Material Table so that I can set the even/odd rows a different background colour.

I setup my ClaimFileHistoryDataSource class:

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() {} } 

On NgInit I make a call to my service to go and get the data I need and populate the DataSource:

this._claimFileHistoryService.getClaimFileHistoryById().subscribe(response => {   this.claimClientInformation = response;          this.dataSource = new ClaimFileHistoryDataSource(this.claimClientInformation); }); 

This is fine and the Data is coming back as it should.

In the HTML the Mat-Table looks like this:

    <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> 

Again I was wondering how do I go about getting the Odd/Even rows of the table and setting them a different row background colour?

like image 563
Ben Clarke Avatar asked Nov 01 '17 08:11

Ben Clarke


2 Answers

Use Following CSS in your .css or .scss file to set the different style for even/odd row:

.mat-row:nth-child(even){     background-color: red; }          .mat-row:nth-child(odd){     background-color: black; } 
like image 146
mohit uprim Avatar answered Sep 25 '22 00:09

mohit uprim


Updating this answer with a newer approach to future developers who may come to this question.

Material Angular now offers some variables to row indexes.

<mat-row *matRowDef="               let row;               let even = even;                columns: displayedColumns;"           [ngClass]="{gray: even}"></mat-row> 

In you CSS file: .gray { background-color: #f5f5f5 }

There are other properties like: index, count, first, last, even and odd.

You can find out more on Angular Docs, more specifically on section "Table showing each row context properties"

like image 24
Gustavo Lopes Avatar answered Sep 23 '22 00:09

Gustavo Lopes