Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度材质表-如何更新现有表的列标题?_Angular_Typescript_Angular Material_Angular Material Table - Fatal编程技术网

Angular 角度材质表-如何更新现有表的列标题?

Angular 角度材质表-如何更新现有表的列标题?,angular,typescript,angular-material,angular-material-table,Angular,Typescript,Angular Material,Angular Material Table,我用的是Angular 7,我有一个简单的组件。通过一些事件,比如鼠标单击,我希望能够更新现有表的数据和标题 之前: 在(目标)之后: 目前,我正在很好地更新数据。但是,我无法更新列的标题文本,除非,也就是说,我执行了一个相当关键的窗口超时调用 这很难描述,所以a应该有帮助。在我链接的“table dynamic columns.example.ts”文件中,我在“changeColumnHeader”按钮单击处理程序中尝试了两种不同的策略。看起来,为了显示新的列标题,我需要首先清除表中显示

我用的是Angular 7,我有一个简单的组件。通过一些事件,比如鼠标单击,我希望能够更新现有表的数据和标题

之前:

在(目标)之后:

目前,我正在很好地更新数据。但是,我无法更新列的标题文本,除非,也就是说,我执行了一个相当关键的窗口超时调用

这很难描述,所以a应该有帮助。在我链接的“table dynamic columns.example.ts”文件中,我在“changeColumnHeader”按钮单击处理程序中尝试了两种不同的策略。看起来,为了显示新的列标题,我需要首先清除表中显示的列,然后在超时时将它们正确地设置回原来的列。可能它不起作用,因为属性名称保持不变(即“id”),只有标题更改

有人知道更好的方法来正确更新吗

可能它不起作用,因为属性名称保持不变(即“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>

分叉了您提供的stackblitz,它正在工作

注释掉了
this.columnsToDisplay=[]
setTimeout()
运行良好。糟糕的是,我昨晚在stackblitz中进行了更改,但没有分叉。现在又回到演示问题上来了,我这样做是为了使两个数据集都没有id属性,而是有id1和id2。这使得一切都可以正常刷新,但实际上,我的两个数据集都有相同的id属性,因此无法正常工作。我完全认为用新的对象引用重新创建配置会导致头部更新,所以我甚至没有想到尝试trackBy。感谢您抽出时间回答,非常感谢!
trackByIndex(i) { return i; }