it-swarm.com.ru

Альтернативные цвета строки angular таблица материалов

Мне интересно, как я нацеливаюсь на четные/нечетные строки внутри Angular Material Table, чтобы я мог задать четные/нечетные строки другим цветом фона.

Я установил свой класс 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() {}
}

На NgInit я звоню в свой сервис, чтобы получить необходимые данные и заполнить DataSource:

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

Это нормально, и данные возвращаются, как и должно быть.

В HTML Mat-Table выглядит так:

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

Снова мне было интересно, как мне получить нечетные/четные строки таблицы и установить для них другой цвет фона строки?

18
Ben Clarke

Используйте Follow CSS в вашем файле .css или .scss, чтобы установить другой стиль для четной/нечетной строки:

   .mat-row:nth-child(even){
          background-color:red;
          }

   .mat-row:nth-child(odd){
          background-color:black;
          }
54
mohit uprim

Обновление этого ответа с более новым подходом к будущим разработчикам, которые могут прийти к этому вопросу.

Материал Angular теперь предлагает некоторые переменные для индексов строк.

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

В вашем CSS файле: .gray { background-color: #f5f5f5 }

Существуют и другие свойства, такие как: index, count, first, last, even и odd.

Вы можете узнать больше о Angular Docs , более конкретно в разделе "Таблица, показывающая свойства контекста каждой строки"

7
Gustavo Lopes

Вы также можете применять цвета к строкам в зависимости от условий.

Например, если значение ячейки равно 100, измените цвет строки на красный.

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

Выше сценарий будет работать, если ваши столбцы имеют myColumn в качестве одного из столбцов . Также используя свойство even вы можете применить требуемый стиль цвета [ngClass]="{rowcolor: even}

0
Hameed Syed