这个表对用户不是很友好,它会强制你手动更新,这错过了使用 Angular 进行绑定的意义。文档中指出:
由于该表针对性能进行了优化,因此它不会自动检查数据数组的更改。相反,当在数据数组上添加、删除或移动对象时,您可以通过调用其 renderRows() 方法来触发对表的渲染行的更新。
要从 Typescrypt 代码调用材料表组件上的方法,您需要通过ViewChild
对表的引用来完成。首先在模板中的表中添加一个带标签的名称:
<table #myTable mat-table ... >
然后在您的 Typescript 文件中,声明一个与您在模板中的主题标签后放置的名称相同的公共成员,并使用它进行装饰,ViewChild
以便 Angular 注入它(我不会显示导入):
export class SomeComponent implements OnInit {
@ViewChild(MatTable) myTable!: MatTable<any>;
(在新版本的 Angular 中需要“!”来欺骗 Typescript 相信它总是非空的。事实证明它会的。继续阅读)
所以现在你可以这样做:
this.myTable.renderRows();
除非表或任何父级位于*ngIf
指令中,否则它将起作用。当该指令工作时,该表不存在于 DOM 中,并且带有注释的成员ViewChild
将是未定义的,因此您不能在其上调用任何内容。这不是材料表的问题,而是 Angular 的设计方式。检查此问题以获取解决方案。我最喜欢的是*ngIf
用[hidden]
. 如果指令在表格中,那没关系,但是当它在父母中时会变得混乱。