【问题标题】:How to enable mat-table with multi selection and dynamic columns如何启用具有多选和动态列的 mat-table
【发布时间】:2018-12-29 10:38:57
【问题描述】:

我正在尝试使用动态列启用多选选项。虽然动态列正在工作,但多选不起作用。

问候

jcm

<mat-table [dataSource]="dataSource" matSort="matSort">
        <ng-container [matColumnDef]="col.columnDef" *ngFor=" let col of displayColumns">
            <th mat-header-cell *matHeaderCellDef mat-sort-header>
                {{ col.header }}
                <ng-container [matColumnDef]="select">
                    <th mat-header-cell *matHeaderCellDef>
                        <mat-checkbox #checkbox (change)="$event ? masterToggle() : null" [disabled]="isDisabled" [checked]="selectionTable.hasValue() && isAllSelected()"
                            [indeterminate]="selectionTable.hasValue() &&
                                                                              !isAllSelected()"></mat-checkbox>
                    </th>
                </ng-container>
            </th>
            <td mat-cell *matCellDef="let element ">{{ element[col.columnDef] }}</td>
            <td mat-cell *matCellDef="let row">
                <mat-checkbox (click)="$event.stopPropagation()" (change)="$event ? selectionTable.toggle(row) : null" [checked]="selectionTable.isSelected(row)"></mat-checkbox>
            </td>
        </ng-container>
        <tr mat-header-row *matHeaderRowDef="columnDefs"></tr>
        <tr mat-row *matRowDef="let row; columns: columnDefs; "></tr>
    </mat-table>

【问题讨论】:

  • 好吧,我已经检查过了,这也是我已经完成的工作,但问题是当动态添加列时我无法使其工作(即多选复选框) . :(
  • 你能提供 StackBlitz 吗?
  • 如果你准备好解释一下就更好了 - 当动态添加列时
  • 这个 mat-table 组件是 StudentList 和 EmployeeList 组件的子组件。使用@ViewChild,设置了“displayColumns”和“columnDefs”。 StudentList 和 EmployeeList 实现了一个通用接口,比如...ListBase。我正在尝试创建一个堆栈闪电战……需要一些时间。我已经粘贴了上面的代码sn-p。

标签: angular-material


【解决方案1】:

你必须为多选列添加一个标题到displayColumns,当你使用*ngFor运行它们时,你必须使用*ngIf检查你是否在第一个标题中(属于多选列)或其他表头(属于动态列),分别创建表头和列。

你可以看到我在stackblitz做的一个例子。

【讨论】:

  • 这是一个很好的例子,但我遇到了一个我似乎无法弄清楚的问题。列标题由相应的键:值对填充。如何选择列标题?我整天都在想办法解决这个问题-stackoverflow.com/questions/57812228/…
  • @RyanIndustries8 你是什么意思?你想自己设置标题的名称而不使用 Object.keys 吗?如果是,我不知道你如何才能实现动态表。如果您想编辑键的名称(例如,如果键是“firstName”并且您想将标题设为“First Name”),我会在 mat-h​​eader-cell 中添加一个管道来执行此操作。跨度>
  • 我已经根据您的要求编辑了我的 stackblitz 示例,并回答了您的问题,希望对您有所帮助!
  • 这太完美了!谢谢你,我什至没有考虑拼接密钥。感谢您抽出时间来做这件事:)
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2020-05-24
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多