как определить индекс в таблице угловых материалов

как определить индексную переменную, когда таблица угловых материалов используется, поскольку ngFor не используется в этой таблице.

Я искал его в документации, но индекс не упоминается нигде в нем.

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

    <!--- Note that these columns can be defined in any order.
          The actual rendered columns are set as a property on the row definition" -->

    <!-- 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">
      <mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
      <mat-cell *matCellDef="let element"> {{element.name}} </mat-cell>
    </ng-container>

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

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

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

Ответы

Ответ 1

Можете ли вы добавить index чтобы let element; let я = index;" let element; let я = index;" как бы вы сделали с *ngFor?

<mat-row *matRowDef="let row; columns: displayedColumns; let i = index"></mat-row>

Или вот так:

<ng-container matColumnDef="index">
  <mat-header-cell *matHeaderCellDef> Index </mat-header-cell>
  <mat-cell *matCellDef="let element; let i = index;">{{i}}</mat-cell>
</ng-container>

Ответ 2

Для тех, кто установил для свойства multiTemplateDataRows mat-table значение true, вы не можете использовать index. Вместо этого вы должны использовать либо dataIndex либо renderIndex.

<mat-cell *matCellDef="let row; let i = dataIndex;">{{i}}</mat-cell>

См. Https://github.com/angular/material2/issues/12793.

Ответ 3

Для тех, кто сталкивается с проблемой сохранения правильного индекса при использовании нумерации страниц, в таблице которого более 1 страницы. Это может быть особенно важно, когда у вас есть редактируемый элемент, поэтому вы используете routerLink для добавления/редактирования/удаления выбранных элементов.

<ng-container matColumnDef="title">
 <mat-header-cell *matHeaderCellDef mat-sort-header>Title</mat-header-cell>
 <mat-cell *matCellDef="let book; let i = index;" fxLayoutAlign.lt-md="center center">
  <button mat-button [routerLink]="[i + (paginator.pageIndex * paginator.pageSize)]" routerLinkActive="active"</button>
 </mat-cell>
</ng-container>

Так же как

<mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 25, 100]"></mat-paginator>

По сути, i + (paginator.pageIndex * paginator.pageSize) является решением, но оно считается от 0. Если вы хотите индексировать от 1, просто сделайте это (i + 1) + (paginator.pageIndex * paginator.pageSize). Стоит отметить, что вам действительно нужны #paginator и [pageSize] = "VALUE".

Ответ 4

Из Angular 5 вы можете использовать псевдоним index для локальной переменной i используя index as i

<ng-container matColumnDef="rowIndex">
  <mat-header-cell *matHeaderCellDef> Index </mat-header-cell>
  <mat-cell *matCellDef="let element;index as i;"> {{ i }} </mat-cell>
</ng-container>

Ответ 5

Если кто-то использует <mat-paginator ../>, то индекс можно интерпретировать как ниже

<mat-cell *matCellDef="let element; index as i"> {{paginator.pageSize * paginator.pageIndex + i + 1}}</mat-cell>