我正在为此项目使用Ag-Grid和Angular,而我想做的是设置快捷键,以通过按相关键来更改所选行的“状态”值('1'='状态完整”等)。有一个称为onCellKeyPress()
的内置函数,它在选择了一行或多行之后侦听按键。效果很好,我有一个开关盒,它会根据按下的键发送一个值,如下所示:
onCellKeyPress = (e: any) => {
switch(e.event.key) {
case '0': this.rowUpdates('New'); break;
case '1': this.rowUpdates('Completed'); break;
case '2': this.rowUpdates('Needs Attention'); break;
case '3': this.rowUpdates('Rejected'); break;
}
}
它向我的自定义函数rowUpdates()
发送一个字符串,该字符串获取值,经过现有节点,查找所有选定的节点,在选定的节点上设置值,并将其推入数组。
现在这是麻烦开始的地方。 updateRowData
有2个参数,第一个是正在执行的更新类型(添加,删除,更新),在我的情况下,我使用的是后者,并且要更改行数组。
rowUpdates = (value: String) => {
let itemsToUpdate = [];
this.gridOptions.api.forEachNode(rowNode => {
if(rowNode.isSelected() === true) {
const selected = rowNode.data;
selected.status.name = value;
itemsToUpdate.push(selected);
console.log(itemsToUpdate);
}
});
this.gridOptions.api.updateRowData({update: itemsToUpdate});
}
但是,当我按一个键更改行值时,它将更新网格中的每一行。更加奇怪的是,我有一个方法可以根据“状态”值向行添加一个类,并且只有我要更改的行才能接收该类。
我很困惑。我已经在console.log中记录了此函数中的所有内容,并且它们都返回了预期值。该数组始终包含已选择的节点,并且updateRowData的返回值始终是同一数组。我尝试将getSelectedNodes
和getSelectedRows
的'forEachNode'切换为无效。有什么想法吗?
答案 0 :(得分:4)
请尝试这个。
updateItems(value: String) {
var itemsToUpdate = [];
this.gridApi.forEachNodeAfterFilterAndSort(function(rowNode, index) {
if (!rowNode.selected) {
return;
}
var data = rowNode.data;
data.status.name = value;
itemsToUpdate.push(data);
});
var res = this.gridApi.updateRowData({ update: itemsToUpdate });
this.gridApi.deselectAll();//optional
}