ag-grid 提供了一种使用
api.getSelectedRows()
函数获取选定行的方法。并提供了一种使用 api.setRowData([])
函数设置所有行的方法。
我正在寻找一些东西来返回网格中的所有行。我知道有一种方法可以使用 getAllRows()
等循环遍历所有行。
有什么方法可以获取整个行数组吗?api.forEachNode()
getAllRows() {
let rowData = [];
this.gridApi.forEachNode(node => rowData.push(node.data));
return rowData;
}
getRenderedNodes
注意:这只会检索rendered
行。如果您使用行虚拟化,这意味着只有视口中的行才会出现在 DOM 中,并且只会返回这些行。根据函数文档:
检索渲染的节点。由于虚拟化,这将仅包含当前可见的行和缓冲区中的行。let {rowsToDisplay} = params.api.getModel();
和此处Grid Api。 我猜原因是因为你可以通过循环来完成它,正如你之前提到的。
gridOptions.api.getRenderedNodes()
或者,如果您的 ag-grid 的源是通过 Angular 链接的,则无需循环网格(假设数据网格没有待处理的更改)
正如对此答案的评论所指出的,我最初给出的答案是不正确的,特别是对于最新版本的AG Grid,它甚至没有 let items: Array<rows> = [];
this.gridApi.forEachNode(function(node) {
items.push(node.data);
});
。
gridOptionsWrapper
并手动构建数据数组似乎是最好的选择。
这就是我从网格 API 获取 rowData 的方式:api.forEachNode()
很多方法的返回对象中都包含
api.getModel().gridOptionsWrapper.gridOptions.rowData
,因此您不一定必须使用
gridOptionsWrapper
。这里可以显示所有选中的节点
**`Try This:`**
对于SSR
const rowsToDisplay = api?.getRenderedNodes()?.map(node => node?.data)
const { selectAll = false, toggledNodes = [] } = params.api?.getServerSideSelectionState() || {};
getAllRows() {
let allRows = [];
this.gridApi.forEachNodeAfterFilter((rowNode) => allRows.push(rowNode));
return allRows;
}
this.gridOptions.rowData