получить индекс строки в таблице угловых материалов v5
Я пытаюсь получить индекс строки в таблице, в 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 - это то, что нужно индексу.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Использование 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
Ответ 2
Вы можете использовать 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 я = index;
) в случае разбиения на страницы индекс будет индексом на этой странице, а не в глобальном объекте, поэтому вы должны быть осторожны в случае разбиения на страницы. пример
Ответ 3
Если вы столкнулись с этой проблемой и используете 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 и добавьте его в индекс.
Ответ 4
Я знаю, что этот пост старый, но вышеуказанное решение не сработало для меня.
вместо этого, если let i = index;
попробуйте let i = dataIndex
для последней версии проверки таблицы матов
это решение. Не знаю, если это только для расширяемой таблицы, хотя
Ответ 5
Я много искал, но для моего случая сценарий "indexOf" не работает должным образом, тогда я нашел этот ответ, и он делает именно то, что мне нужно.
let i = index;
i + (paginator.pageIndex * paginator.pageSize);
Ответ 6
Включить 'let i = index' в * matRowDef