Дайте каждой строке случайный цвет в mattable - PullRequest
2 голосов
/ 10 марта 2020

Я пытаюсь реализовать функциональность в mattable таким образом, чтобы был определен массив цветов, и каждый цвет случайно отображался на заднем плане каждой строки mattable. Я не уверен, как реализовать это, но я подумал, может быть, это можно сделать с помощью привязки стилей или что-то в этом роде. Я попытался использовать css, но это кажется очень плохой идеей, вот мой код mattable

<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

  <!-- Checkbox Column -->
  <ng-container matColumnDef="select">
    <th mat-header-cell *matHeaderCellDef>
      <mat-checkbox (change)="$event ? masterToggle() : null"
                    [checked]="selection.hasValue() && isAllSelected()"
                    [indeterminate]="selection.hasValue() && !isAllSelected()">
      </mat-checkbox>
    </th>
    <td mat-cell *matCellDef="let row">
      <mat-checkbox (click)="$event.stopPropagation()"
                    (change)="$event ? selection.toggle(row) : null"
                    [checked]="selection.isSelected(row)">
      </mat-checkbox>
    </td>
  </ng-container>

  <!-- Position Column -->
  <ng-container matColumnDef="srNo">
    <th mat-header-cell *matHeaderCellDef> No. </th>
    <td mat-cell *matCellDef="let element; let i = index"> {{i + 1}} </td>
  </ng-container>

  <!-- Name Column -->
  <ng-container matColumnDef="routes">
    <th mat-header-cell *matHeaderCellDef> Routes </th>
    <td mat-cell *matCellDef="let element"> {{element.name}} </td>
  </ng-container>

  <!-- Weight Column -->
  <ng-container matColumnDef="percentage">
    <th mat-header-cell *matHeaderCellDef> </th>
    <td mat-cell *matCellDef="let element"><mat-progress-bar style="margin-top: 20px;" mode="determinate" value="{{element.percentage}}"></mat-progress-bar>
      <div style="position:relative; top: -20px;">
        {{ element.percentage }}%
      </div>
    </td>
  </ng-container>

  <!-- Symbol Column -->
  <ng-container matColumnDef="capacity">
    <th mat-header-cell *matHeaderCellDef  style="text-align: center;"> Total Parcels </th>
    <td mat-cell *matCellDef="let element"  style="text-align: center;"> {{element.totalParcels}} </td>
  </ng-container>

  <ng-container matColumnDef="price">
    <th mat-header-cell *matHeaderCellDef  style="text-align: center;"> Total Price </th>
    <td mat-cell *matCellDef="let element"  style="text-align: center;"> {{element.totalPrice | currency: 'Rs.'}} </td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"
      (click)="selection.toggle(row)">
  </tr>
</table>

css code

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

.mat-row:nth-child(odd){
  background-color: greenyellow;
}

Мне нужно знать, как я могу назначить случайный цвета для каждого ряда. Прямо сейчас у моего mattable есть только три ряда, и 1-й и 3-й ряд показывают зеленым желтым цветом, в то время как 2-й показывает красным цветом.

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

почему бы не включить в ваш источник данных новое свойство: bgColor и использовать в таблице?

В типичном примере

dataSource = ELEMENT_DATA.map(x => ({
    ...x,
    bgColor: this.getRandomColor()
  }));
  getRandomColor() {
    var color = Math.floor(0x1000000 * Math.random()).toString(16);
    return "#" + ("000000" + color).slice(-6);
  }

И

<tr mat-row *matRowDef="let row; columns: displayedColumns;"
       [style.background-color]="row.bgColor"></tr>

См. в стекаблиц

0 голосов
/ 10 марта 2020

Вот как я это сделал

heroes = [1,2,3,4,5,6,7,8,9];
bgColor() {

}

getRandomColor2() {
  var length = 6;
  var chars = '0123456789ABCDEF';
  var hex = '#';
  while(length--) hex += chars[(Math.random() * 16) | 0];
  return hex;
}

getRandomColor() {
  var color = Math.floor(0x1000000 * Math.random()).toString(16);
  return '#' + ('000000' + color).slice(-6);
}

и в моем html файле

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"
                (click)="selection.toggle(row)" [ngStyle]="{'background-color': getRandomColor()}">
  </tr>

я решил проблему, но когда прокручивал страницу вверх или вниз, цвета продолжай меняться. Как я могу остановить их от изменения? Похоже, что при прокрутке таблица продолжает рендеринг, даже если данные в mattable - stati c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...