Вы получаете ошибку, потому что вы дважды зацикливаетесь на displayedColumns
.
Чтобы исправить ошибку, вам необходимо:
- исправить определение столбца "select"
- исключить идентификатор выбранного столбца из
displayedColumns
чтобы не использовать его несколько раз - включите идентификатор столбца выбора в список идентификаторов для определений строк
столбец выбора
<ng-container matColumnDef="select">
<!-- ... -->
</ng-container>
Здесь вам нужно удалить *ngFor="..."
, если вы хотите отобразить только один столбец выбора с флажком для каждой строки. Если вы хотите выбрать несколько столбцов (например, по одному для каждого столбца данных), вам нужно определить список уникальных идентификаторов для этих столбцов и l oop над ними:
<ng-container matColumnDef="select_{{col}}" *ngFor="let col of dataColumns">
<!-- e.g. dataColumns = ["id", "col1", "col2"];
would result in select_id, select_col1, select_col2 -->
<!-- ... -->
</ng-container>
Другие столбцы
<ng-container [matColumnDef]="column" *ngFor="let column of dataColumns">
<!-- ... -->
</ng-container>
Заменить displayedColumns
списком, включающим все идентификаторы столбцов , за исключением идентификаторов выбранных столбцов.
Rows
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
Наконец, используйте список идентификаторов столбцов, который содержит идентификаторы столбцов данных, а также идентификаторы выбранных столбцов
Имеют посмотрите на этот Stackblitz , где я добавил примеры для одного и нескольких столбцов выбора. ( Примечание: я не настраивал логи выбора c для примера с несколькими столбцами .. )