Angular7中如何主动强制调用getRowStyle函数更新表格行样式
手动触发getRowStyle重新执行的解决方案
ag-grid的getRowStyle函数默认仅在表格初始化、行数据变更时触发执行,自定义修改该函数逻辑后不会自动触发重计算,可通过以下方式实现手动触发:
- 方案1:调用
redrawRows方法重绘行(推荐,性能最优)
直接调用ag-grid提供的行重绘API,仅重绘指定行/所有行,触发行样式重新计算,修改你的代码如下:
rowConditionalFormatting(rowColor, rowFormatData) { this.rowFormatData = rowFormatData; this.getRowStyle = params => { for (let i = 0; i < this.rowFormatData.length; i++) { const columnHeader = this.rowFormatData[i].Name; const operator = this.rowFormatData[i].Operator; const cellValue = this.rowFormatData[i].Value; if (params.data[columnHeader] == cellValue) { return {background: rowColor }; } } } // 新增:重绘所有行,触发getRowStyle重新执行 this.GridRef.api.redrawRows(); // 若只需重绘指定行,可传入对应行节点减少性能消耗: // const targetRowNodes = this.GridRef.api.getRenderedNodes().filter(node => /* 过滤需要更新样式的行 */) // this.GridRef.api.redrawRows({ rowNodes: targetRowNodes }) }
- 方案2:关闭行样式缓存(适合小数据量表格)
在表格初始化配置中添加如下参数,关闭getRowStyle的结果缓存,每次表格视图变更都会重新计算行样式:
// ag-grid初始化配置 gridOptions: { // 其他配置... rowStyle: { refreshStrategy: 'everything' } }
如果使用Vue/React等框架,也可以将rowColor、rowFormatData声明为响应式变量,变量更新时会自动触发组件重渲染,连带getRowStyle重新执行。
- 方案3:全量刷新行模型(不推荐,性能损耗大)
如果前两种方案不适用,可调用全量刷新API触发所有行逻辑重新执行:
this.GridRef.api.refreshClientSideRowModel()
该方法会全量重算所有行的渲染、样式逻辑,仅适合100行以内的小表格使用。
内容的提问来源于stack exchange,提问作者Rohit Khadatkar
相关产品推荐
相关产品推荐

