6

我正在使用 Angular 7,并且我有一个带有Angular Material Table的简单组件。通过一些事件,比如鼠标点击,我希望能够更新该现有表的数据和表头。

前:

在此处输入图像描述

之后(目标):

在此处输入图像描述

目前,我正在获取要更新的数据。但是,我无法获取要更新的列的标题文本,除非,也就是说,我做了一个相当狡猾的窗口超时调用。

这很难描述,所以stackblitz repo应该会有所帮助。在我已经链接到那里的“table-dynamic-columns.example.ts”文件中,我有两种不同的策略可以在“changeColumnHeader”按钮单击处理程序上尝试。看来,为了让我的新列标题显示出来,我需要先清除表中显示的列,然后在超时时正确设置它们。也许它不起作用,因为属性名称保持不变(即“id”)并且只有标题发生了变化。

有谁知道更好的方法来让它正确更新?

4

1 回答 1

9

也许它不起作用,因为属性名称保持不变(即“id”)并且只有标题发生了变化。

这就是它不更新的原因,如本评论所述

在同一评论中,您可以使用建议的解决方案(添加 trackBy 函数)。

为此,trackBy请在您的模板中包含:

<ng-container [matColumnDef]="config.property" *ngFor="let config of configs; trackBy: trackByIndex">
<th mat-header-cell *matHeaderCellDef> {{config.name}} </th>
<td mat-cell *matCellDef="let element"> {{element[config.property]}} </td>

trackByIndex在组件 ts 文件中包含函数:

trackByIndex(i) { return i; }

分叉了你提供的 stackblitz,它在这里工作

于 2019-02-01T17:37:54.013 回答