如何在ag-grid中通过索引获取节点?
How to get a node by index in ag-grid?
AgGrid 希望将节点传递给它的许多数据函数。你如何通过索引获取节点?请看下面的截图:
api.forEachNode(function(node){
api.refreshRows([node]);
})
我可以将 node
参数传递给 refreshRows()
函数,因为我是通过 forEachNode()
获取它的。
如何在不遍历 forEachNode()
的情况下通过索引获取节点?
您可以使用 getVirtualRow()
方法获取单行。此功能是行模型的一部分。您可以通过getModel()
函数获取行模型。
var model = api.getModel();
console.log(model.getVirtualRow(idx));
基于@Charlie H 的回答,自从他使用的版本以来,API 完全有可能发生了一些变化。我正在使用(截至 2017 年 12 月的当前版本)15.0.我发现 rowsToDisplay[]
包含可访问的行数组。例如,以下内容完全符合您的想象:
onCellEditingStarted: function (event) {
var displayModel = gridOptions.api.getModel();
var rowNode = displayModel.rowsToDisplay[event.rowIndex];
rowNode.setRowHeight(100);
gridOptions.api.onRowHeightChanged();
},
这个问题可能有点晚了,但无论如何对于将来搜索这个的人来说:
除了给出的答案,您还可以通过以下方式获取行节点,
// Getting the row node by the row index
cont rowNode1 = api.getDisplayedRowAtIndex(rowIndex);
在某些情况下,上述方法不适用,因为当您对网格进行某些更改(排序、筛选等)时,rowIndex 可能会发生变化。
另一种方法是使用行的id,即使你排序,过滤...网格也不会改变。
getRowNode(id) : Returns the row node with the given ID. The row node id is the one you provided with the callback getRowNodeId(data), otherwise, the id is a number auto-generated by the grid when the row data is set.
// Getting rowNode by row id
const rowNode2 = api.getRowNode(rowId);
如果您想逐行遍历网格,您可以使用它(其中 $scope.grid 是您的网格名称):
$scope.high_index = 0;
$scope.rows = [];
$scope.grid.api.forEachNode(function (node) {
$scope.rows[node.childIndex] = node.id;
if (node.childIndex > $scope.high_index)
$scope.high_index = node.childIndex;
});
for (i = 0; i <= $scope.high_index; i++) {
var node = $scope.grid.api.getRowNode($scope.rows[i]);
}
或者,如果您希望通过子索引获得行节点,您现在可以使用(在上面设置 $scope.rows 之后):
var node = $scope.grid.api.getRowNode($scope.rows[i]);
其中 i 是您想要的行号。
AgGrid 希望将节点传递给它的许多数据函数。你如何通过索引获取节点?请看下面的截图:
api.forEachNode(function(node){
api.refreshRows([node]);
})
我可以将 node
参数传递给 refreshRows()
函数,因为我是通过 forEachNode()
获取它的。
如何在不遍历 forEachNode()
的情况下通过索引获取节点?
您可以使用 getVirtualRow()
方法获取单行。此功能是行模型的一部分。您可以通过getModel()
函数获取行模型。
var model = api.getModel();
console.log(model.getVirtualRow(idx));
基于@Charlie H 的回答,自从他使用的版本以来,API 完全有可能发生了一些变化。我正在使用(截至 2017 年 12 月的当前版本)15.0.我发现 rowsToDisplay[]
包含可访问的行数组。例如,以下内容完全符合您的想象:
onCellEditingStarted: function (event) {
var displayModel = gridOptions.api.getModel();
var rowNode = displayModel.rowsToDisplay[event.rowIndex];
rowNode.setRowHeight(100);
gridOptions.api.onRowHeightChanged();
},
这个问题可能有点晚了,但无论如何对于将来搜索这个的人来说:
除了给出的答案,您还可以通过以下方式获取行节点,
// Getting the row node by the row index
cont rowNode1 = api.getDisplayedRowAtIndex(rowIndex);
在某些情况下,上述方法不适用,因为当您对网格进行某些更改(排序、筛选等)时,rowIndex 可能会发生变化。
另一种方法是使用行的id,即使你排序,过滤...网格也不会改变。
getRowNode(id) : Returns the row node with the given ID. The row node id is the one you provided with the callback getRowNodeId(data), otherwise, the id is a number auto-generated by the grid when the row data is set.
// Getting rowNode by row id
const rowNode2 = api.getRowNode(rowId);
如果您想逐行遍历网格,您可以使用它(其中 $scope.grid 是您的网格名称):
$scope.high_index = 0;
$scope.rows = [];
$scope.grid.api.forEachNode(function (node) {
$scope.rows[node.childIndex] = node.id;
if (node.childIndex > $scope.high_index)
$scope.high_index = node.childIndex;
});
for (i = 0; i <= $scope.high_index; i++) {
var node = $scope.grid.api.getRowNode($scope.rows[i]);
}
或者,如果您希望通过子索引获得行节点,您现在可以使用(在上面设置 $scope.rows 之后):
var node = $scope.grid.api.getRowNode($scope.rows[i]);
其中 i 是您想要的行号。