You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ag-Grid onCellEditingStopped事件无法获取旧值,求解决方案

嗨,我之前也遇到过这个问题!确实onCellEditingStopped本身不会直接返回旧值,不过ag-Grid有几种更优雅的方式来搞定,不用单独维护变量那么麻烦,给你几个实用方案:

方案1:用cellValueChanged事件(最推荐)

这个事件天生就带了oldValue和newValue参数,完美匹配你的需求,而且逻辑更精准——它只会在单元格值真的发生变化时触发,不像onCellEditingStopped不管改没改值都会跑一遍。代码示例:

cellValueChanged: function(event) {
    console.log('修改前的值:', event.oldValue);
    console.log('修改后的值:', event.newValue);
    // 还能拿到对应的行和列信息
    console.log('修改的字段:', event.colDef.field);
    console.log('所在行数据:', event.rowData);
}

方案2:在onCellEditingStopped里通过API拿旧值

如果你一定要坚持用onCellEditingStopped,可以通过行节点的原始数据获取旧值(前提是你还没把新值同步到rowData里):

onCellEditingStopped: function(event) {
    // 从行节点的原始数据中取旧值
    const oldValue = event.node.data[event.colDef.field];
    const newValue = event.value;
    console.log('旧值:', oldValue);
    console.log('新值:', newValue);
}

小提示:如果你的grid开了immutableData或者编辑时自动更新了rowData,上面的方法可能失效,这时候可以用gridApi.getOriginalRowNode(event.node.id)获取原始行数据来拿旧值。

方案3:优化你现有的存储方案

要是你还是想沿用自己的思路,建议把旧值存在行节点的自定义属性里,而不是全局变量,这样更清晰也不会冲突:

onCellEditingStarted: function(event) {
    // 把旧值存在当前行节点的自定义属性中
    event.node._editedCellOldValue = event.node.data[event.colDef.field];
},
onCellEditingStopped: function(event) {
    const oldValue = event.node._editedCellOldValue;
    const newValue = event.value;
    console.log('旧值:', oldValue);
    console.log('新值:', newValue);
    // 用完记得删掉这个自定义属性,避免内存冗余
    delete event.node._editedCellOldValue;
}

内容的提问来源于stack exchange,提问作者tnishada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:09:39