Javascript ag网格-展开/折叠树数据

Javascript ag网格-展开/折叠树数据,javascript,ag-grid,Javascript,Ag Grid,我使用aggrid(free)和angular1,我已经得到了我的树数据,可以按需要显示,其中节点的子节点在它右边的列中。但是,我要做的是双击时折叠或展开节点。因为我的默认视图设置为展开,所以现在只关注如何使它们折叠。以下是我在$scope.gridOptions中给出的双击事件的代码: onCellDoubleClicked: function(event){ event.node.expanded = false;

我使用aggrid(free)和angular1,我已经得到了我的树数据,可以按需要显示,其中节点的子节点在它右边的列中。但是,我要做的是双击时折叠或展开节点。因为我的默认视图设置为展开,所以现在只关注如何使它们折叠。以下是我在$scope.gridOptions中给出的双击事件的代码:

onCellDoubleClicked: function(event){ 
                                      event.node.expanded = false;
                                      $scope.gridOptions.api.refreshView();
                                     };
getNodeChildDetails: function(obj){
                if (obj.children){
                    var nodeType = obj.breakdownCol;
                    return {
                        group: true,
                        expanded: obj.expanded || true,
                        children: obj.children,
                        field: 'name',
                        key: obj[nodeType]
                    }
                } else {
                    return null;
                }
            }
我的假设是,将expanded属性更改为false将导致refreshView调用在子节点折叠的情况下重新渲染网格,但双击后视图保持不变

此外,gridOptions中的my getChildNodeDetails:

onCellDoubleClicked: function(event){ 
                                      event.node.expanded = false;
                                      $scope.gridOptions.api.refreshView();
                                     };
getNodeChildDetails: function(obj){
                if (obj.children){
                    var nodeType = obj.breakdownCol;
                    return {
                        group: true,
                        expanded: obj.expanded || true,
                        children: obj.children,
                        field: 'name',
                        key: obj[nodeType]
                    }
                } else {
                    return null;
                }
            }

有没有关于我如何在不购买enterprise的情况下解决这个问题的想法?我知道,在企业中,您可以对行进行分组,这是内置的扩展/折叠功能。

在我自己的应用程序中,我创建了一个模拟行分组功能的变通方法。它真正做的是来自网格的数据

此选项的一个缺点是,由于行实际上不在表中,因此与网格提供的实际企业功能不同,无法对未显示的数据进行任何列过滤或排序。但是,如果禁用了筛选和排序,则此选项完全可行

大概是这样的:

function toggleExpansion(index, data) {
    if (insert) {
        gridOptions.api.insertItemsAtIndex(index, data);
    } else {
        gridOptions.api.removeItems(data)
    }
}

我的特定代码进行了更多的检查和其他与此问题无关的事情,但这就是我作为解决问题的方法所做的简单解释。

我使用的是React,但您可能可以对Angular执行类似的操作:

function expandAll(expand) {
  agGridRef.current.api.forEachNode((node) => {
    node.setExpanded(expand);
  });
}
其中agGridRef是对组件的引用:

<AgGridReact
  ref={agGridRef}
.
.
.
</AgGridReact>

我想你是想重新创建而不是更正?。。。因为列分组是免费版本的一部分…@JarodMoser Correct,应该像您在行分组示例中看到的展开/折叠一样工作。