首页 文章

在Angular Material Table上调用renderRows()

提问于
浏览
7

我正在尝试在更新表中使用的数据后刷新我的Angular Table .

文档说“你可以通过调用renderRows()方法触发对表的渲染行的更新 . ”但它不像普通的子组件,我可以使用“@ViewChild(MatSort)排序:MatSort;”因为我不导入它 .

如果我导入它并尝试类似@ViewChild('myTable')myTable:MatTableModule;然后我收到一个错误,指出renderRows()在该类型上不存在 .

我怎么称呼这种方法?谢谢!

我的表格代码片段:

<mat-table #table [dataSource]="dataSource" myTable class="dataTable">

2 回答

  • 0

    确保导入ViewChild和MatTable:

    import {Component, ViewChild} from '@angular/core';
    import {MatTable} from '@angular/material';
    

    然后你可以使用ViewChild获取对表的引用(注意MatTable上需要类型T - 我只使用了任何类型,但如果你有一个类型表,你将需要使用该类型:

    @ViewChild(MatTable) table: MatTable<any>;
    

    然后,当您以任何方式修改表时,您将需要调用renderRows()方法 .

    delete(row: any): void {
      /* delete logic here */
      this.table.renderRows();
    }
    

    这是一个非常简单的工作示例:https://stackblitz.com/edit/angular-bxrahf

    我自己解决这个问题时发现了一些来源:

  • 14

    @ViewChild('myTable')myTable:MatTableModule

    你不应该查询字符串 . 这将查询引用(定义为 <cmp #ref> ) . 类型也是错误的:你're not grabbing a module from the view, you'重新抓取一个组件 .

    您应该导入要查询的组件并执行以下操作(根据您需要查询的组件进行更改):

    @ViewChild(MatTable) matTable: MatTable
    

    ViewChild 装饰器中的参数是您要查询的组件,类型只是为了您的方便 - 您可以省略它或说 any ,但是您赢了't have any help from TypeScript if you do not do it so it'建议离开它 .

相关问题