swimlane/ngx-datatable组件属性变更时如何触发cellClass/rowClass函数执行?
ngx-datatable的rowClass、cellClass样式计算函数默认仅在表格核心配置(数据源rows、列定义、分页排序规则等)发生引用变更时才会重新执行,普通组件内部属性变更不会主动触发样式重计算,可以通过以下两种方式触发执行:
- 方法1:手动调用表格内置重绘方法
给ngx-datatable声明模板引用变量,在依赖属性更新后主动调用内置方法触发重计算,代码示例如下:
import { DatatableComponent } from '@swimlane/ngx-datatable'; @Component({ ..., template: `<ngx-datatable #table [rowClass]="rowClass" [rows]="rows"></ngx-datatable>` }) class SomeComponent { // 获取表格组件实例 @ViewChild('table') table: DatatableComponent; someVariable = true; // 表格数据源 rows = []; // 自定义的变量更新方法 updateSomeVariable() { this.someVariable = false; // 主动触发表格重计算,会重新执行rowClass、cellClass函数 this.table.recalculate(); // 也可以调用 updateRows 方法,效果一致 // this.table.updateRows(); } rowClass = (row) => { return { 'some-class': this.someVariable === row.someVariable }; }; }
- 方法2:变更rows数组的引用
如果不需要操作表格实例,可以在依赖属性更新后,对rows数组做浅拷贝生成新的引用,触发表格的输入属性变更检测,自动触发样式重计算:
updateSomeVariable() { this.someVariable = false; // 浅拷贝数组生成新引用,触发表格输入变更检测 this.rows = [...this.rows]; }
内容的提问来源于stack exchange,提问作者Shohei Ktbtk
相关产品推荐
相关产品推荐

