在 ag-grid 中,如何从数据数组中检索行的索引,而不是.rowIndex
属性,因为在应用排序和过滤时,rowIndex
属性可能会更改。 数据结构没有标识符,因此在迭代数据时无法查找 Id。 (参见下面的迈克·史密斯的例子(。 根据下面的示例,当应用排序时,如何获取" 原始索引"属性?
我需要能够按照node.index
而不是node.rowIndex
的方式做一些事情。
// Data I provide ag-grid
const unsortedData = [
{firstName: 'Mike', lastName: 'Smith'}, // original index 0, rowIndex 0
{firstName: 'Steve', lastName: 'Jones'}, // original index 1, rowIndex 1
{firstName: 'Mike', lastName: 'Smith'}, // original index 2, rowIndex 2
{firstName: 'John', lastName: 'Johnson'} // original index 3, rowIndex 3
];
// Example of internally sorted data by ag-grid. IE `rowsAfterSort`.
const sortedData = [
{firstName: 'John', lastName: 'Johnson'}, // original index 3, rowIndex 0
{firstName: 'Mike', lastName: 'Smith'}, // original index 0, rowIndex 1
{firstName: 'Mike', lastName: 'Smith'}, // original index 2, rowIndex 2
{firstName: 'Steve', lastName: 'Jones'} // original index 1, rowIndex 3
];
// Callback function from ag-grid
function myAgGridCallback(params){
// var realIndex = params.node.rowIndex; //rowIndex changes when sorting is applied
// var realIndex = params.node.index; // I need something like this. index does not exist.
// Do stuff with realIndex
}
解决此问题的一个好方法是在每个元素上插入一个唯一标识符,这将导致数据集之间的牢固联系。
既然你说这是不可能的,你可以使用 ag-grid 生成的 ID,它也将作为数据的索引。
正如农业网格文档所说:
获取rowNode的最简单方法是通过其ID。该 ID 是 由您使用网格回调getRowNodeId((提供,或生成 通过网格使用内部序列。
因此,在您的情况下,解决方案之一是使用getDisplayedRowAtIndex
方法。在第二个示例中,对数据进行排序后,您可以执行以下操作:
this.gridApi.getDisplayedRowAtIndex(0).id
// where 0 is your rowIndex
这将导致值3
如您所期望的那样。基本上,对于您访问的每个节点,它将具有id
属性,它将用作原始数组的索引。
根据您的应用程序,您还可以使用forEachNode
文档描述的方法:
遍历网格中的每个节点(行(并调用回调 对于每个节点。这类似于 Javascript 数组。这是为每个节点调用的,忽略任何 在网格内应用的筛选或排序。如果使用无限行 模型,然后为页面缓存中加载的每个页面调用。