получить индекс строки в таблице угловых материалов v5 - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь получить индекс строки в таблице, в html, который был реализован с использованием углового материала v5.2.Есть ли какой-либо метод для получения индекса?

Код для справки:

<div class="example-container mat-elevation-z8">
  <div class="example-header">
    <mat-form-field>
      <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
    </mat-form-field>
  </div>

  <mat-table #table [dataSource]="dataSource">

    <!-- Position Column -->
    <ng-container matColumnDef="position">
      <mat-header-cell *matHeaderCellDef> No. </mat-header-cell>
      <mat-cell *matCellDef="let element"> {{element.position}} </mat-cell>
    </ng-container>

    <!-- Name Column -->
    <ng-container matColumnDef="name">
     <button (click)="doSomething()"> Do something</button>
    </ng-container>

    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
  </mat-table>
</div>

Метод doSomething - это то, для чего нужен индекс.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Использование indexOf - это огромная трата ресурсов.Правильный путь - инициализация переменной со значением индекса, например:

<ng-container matColumnDef="position">
  <th mat-header-cell *matHeaderCellDef mat-sort-header> Num. </th>
  <td mat-cell *matCellDef="let element; let i = index">{{i}}</td>
</ng-container>

https://material.angular.io/components/table/examples

0 голосов
/ 10 мая 2019

Если вы столкнулись с этой проблемой и используете paginator индекс, который вы получите здесь:

  <td mat-cell *matCellDef="let element; let i = index">{{i}}</td>

будет текущим индексом, отображаемым в таблице. Например, если вы находитесь на странице 2, а размер вашей страницы равен 5, то первый индекс таблицы будет 0, а не 5 (или шестой элемент). Итак, что вы можете сделать, чтобы получить истинный индекс, примерно так:

index =
      this.paginator.pageIndex > 0
        ? index + this.paginator.pageIndex * this.paginator.pageSize
        : index;

Если страница находится на первой странице, индекс не изменяется. В противном случае умножьте pageIndex на pageSize и добавьте его в индекс.

0 голосов
/ 11 мая 2018

Вы можете использовать свойство filteredData вашего dataSource, например:

<ng-container matColumnDef="weight">
  <th mat-header-cell *matHeaderCellDef> Header</th>
  <td mat-cell *matCellDef="let element"> {{dataSource.filteredData.indexOf(element)}} </td>
</ng-container>

Демо

С решением @ user3891850(let i = index;), в случае разбивки на страницы индекс будет индексом на этой странице, а не глобальным объектом, поэтому вы должны быть осторожны в случае разбивки на страницы. пример

...