Ag-grid不会将行焦点保持在表刷新上

时间:2018-04-12 19:59:22

标签: javascript angularjs ag-grid

我有一个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做错了?

2 个答案:

答案 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;
                        }
                    });