Хорошо StackOverflow - мне нужна ваша помощь.
Итак, мы используем Angular 6 и Material для создания динамической таблицы данных с флажками, которые дают пользователю возможность выбрать все или отдельные строки.
На сайте (https://material.angular.io/components/table/overview), есть пример, показывающий, как это можно сделать. Однако во всех приведенных примерах используются жестко закодированные идентификаторы столбцов. Я хочу иметь возможность динамически изменять заголовки столбцовна лету, таким образом, вот как выглядит мой HTML-шаблон:
<table mat-table matSort [dataSource]="dataSource" class="mat-elevation-z8">
<!-- Static Checkbox Column -->
<ng-container matColumnDef="checkboxes">
<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>
<!-- Dynamic Column Generation -->
<div *ngFor="let displayedColumn of displayedColumns; let columnIndex = index">
<ng-container *ngIf="displayedColumn !='checkboxes'" matColumnDef="{{displayedColumn}}">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{displayedColumn}}</th>
<td mat-cell *matCellDef="let element "> {{element[displayedColumn]}}</td>
</ng-container>
</div>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"
(click)="selection.toggle(row)">
</tr>
</table>
Поддерживаемый TypeScript выглядит следующим образом:
export class DataTableComponent implements OnInit {
columns = [
{ columnDef: 'uuid', header: 'UUID', cell: (element: Module) => `${element.uuid}` },
{ columnDef: 'name', header: 'Name', cell: (element: Module) => `${element.name}` },
{ columnDef: 'summary', header: 'Summary', cell: (element: Module) => `${element.summary}` },
];
displayedColumns = [['checkboxes'], this.columns.map(c => c.columnDef)];
dataSource = new MatTableDataSource<Module>(NDE_DATA_SOURCE);
.............
Проблема в том, что консольсообщая мне следующее: Ошибка: не удалось найти столбец с идентификатором "флажки".
Тем не менее, в своем HTML-коде я прямо заявил, что ...
<ng-container matColumnDef="checkboxes">
Чего мне не хватает?