我有一个ag-grid表,每隔几秒刷新一次数据。每当它执行此操作时,选定的表格行失去焦点,我试图找出一种强制焦点回归的方法。我认为这就像跟踪所选节点一样简单,然后在刷新时设置值,但它似乎没有工作。基本上,每当用户在表格中进行选择时,我都会跟踪节点和聚焦单元格:
function onSelectionChanged() {
var selectedRowNode = $scope.ResourceCheckoutTableGrid.api.getSelectedNodes()[0];
$scope.focusedCell = $scope.ResourceCheckoutTableGrid.api.getFocusedCell();
$scope.selectedRowNode = selectedRowNode;
}
然后,我每三秒加载一次表数据:
$scope.startRefresh = function() {
setInterval(function() {
$scope.loadTableData();
},3000)
}
当重新加载表数据时,它会失去焦点,但我尝试使用保存的值将其恢复:
$scope.loadTableData = function() {
$http.get('RobotDataInterface/Resource/getAllCheckedOutResources').success(
function(data) {
$scope.rowCount = data.length;
if ($scope.ResourceCheckoutTableGrid.api != undefined) {
$scope.ResourceCheckoutTableGrid.api.setRowData(data);
$scope.ResourceCheckoutTableGrid.api.sizeColumnsToFit();
var node = $scope.selectedRowNode;
var cell = $scope.focusedCell;
if (node != "" && cell != "") {
node.setSelected(true);
$scope.ResourceCheckoutTableGrid.api.setFocusedCell(cell.rowIndex, cell.column);
}
}
});
};
如果我设置断点,我可以看到它在进行这些调用时:
node.setSelected(true);
$scope.ResourceCheckoutTableGrid.api.setFocusedCell(cell.rowIndex, cell.column);
我可以看到价值是我所期望的;节点和聚焦单元格,rowIndex等是我所期望的,但仍然选定的行失去焦点(即使它确实设置为' selected = true'。有谁知道我' m做错了?
答案 0 :(得分:0)
要获得预期结果,请在setFocusedCell方法中将 cell.column 更改为 cell.column.colId
答案 1 :(得分:0)
好吧,看起来这适用于我想要做的事情;而不是细胞焦点我需要将节点本身设置为selected = true ...我可以发誓我之前做过这个,甚至验证它设置为选择为true,但无论如何这段代码完成了所需的结果:
$scope.ResourceCheckoutTableGrid.api.forEachNode((node) => {
if (node.childIndex === ($scope.selectedRowNode.childIndex)) {
node.setSelected(true);
return;
}
});