Javascript Ag grid Enterprise是否使用按钮展开/折叠所有行?非常缓慢的碰撞和边缘

Javascript Ag grid Enterprise是否使用按钮展开/折叠所有行?非常缓慢的碰撞和边缘,javascript,angular,ag-grid,Javascript,Angular,Ag Grid,我创建了一个按钮来展开ag网格中的所有行(企业版),网格中有150行。它在Chrome中运行良好,但在最新的FF和Edge中显示了一个警报,表示该网页正在使您的浏览器变慢是否有更好的方法来扩展所有行?大约需要10-15秒 HTML 展开/折叠 JavaScript this.columnDefs = [ { headerName: "", field: "", cellRend

我创建了一个按钮来展开ag网格中的所有行(企业版),网格中有150行。它在Chrome中运行良好,但在最新的FF和Edge中显示了一个警报,表示该网页正在使您的浏览器变慢是否有更好的方法来扩展所有行?大约需要10-15秒

HTML

展开/折叠
JavaScript

this.columnDefs = [
           {
                headerName: "",
                field: "",
                cellRenderer: "group",// for rendering cell
                suppressMenu: true,
                suppressSorting: true
            }
           ]
           // This is how I am creating fullrow width
            this.gridOptions = <GridOptions>{
            isFullWidthCell: function (rowNode) {
            var rowIsNestedRow = rowNode.flower;
            return rowIsNestedRow;
            },
            fullWidthCellRendererFramework: AgGridInventorRowComponent,
            doesDataFlower: function (dataItem) {
            return true;
         }
    public expandAll(value:boolean) {
            if(value) {
                this.gridOptions.api.forEachNode((node) =>{
                    node.setExpanded(true);
                });
            } else {
                this.gridOptions.api.forEachNode((node) =>{
                    node.setExpanded(false);
                });
            }
        }
this.columnDefs=[
{
头名:“,
字段:“”,
cellRenderer:“组”,//用于渲染单元格
是的,
抑制排序:正确
}
]
//这就是我创建全行宽度的方式
this.gridOptions={
isFullWidthCell:函数(行节点){
var rowIsNestedRow=rowNode.flower;
返回rowsnestedrow;
},
FullWidthCellRenderFramework:AggridInventErrorComponent,
doesDataFlower:函数(数据项){
返回true;
}
公共expandAll(值:布尔值){
如果(值){
this.gridOptions.api.forEachNode((节点)=>{
node.setExpanded(true);
});
}否则{
this.gridOptions.api.forEachNode((节点)=>{
node.setExpanded(false);
});
}
}

我假设您正在使用,您的意思是有150个分组行可以展开

当前,您的代码将针对每一行数据执行…而不仅仅是那些可以扩展的数据。因此,假设您在每个组中有50行左右的数据,您将调用
setExpanded
函数7500次。您可以通过输入chec将此限制为仅对分组行调用
setExpanded
调用
setExpanded
前的k:

public expandAll(value:boolean) {
    this.gridOptions.api.forEachNode((node) =>{
        if (node.group)
            node.setExpanded(value);
    });
}

在firefox上测试,110行组大约需要2秒,511行组大约需要5秒,根据文档:

调用
node.setExpanded()
会导致重新绘制网格。如果有许多节点要展开,则最好直接设置
node.expanded=true
,然后在完成后调用
api.onGroupExpandedOrCollapsed()
,以使网格重新绘制网格一次

所以我修改了我的代码如下:

this.gridOptions.api.forEachNode(node => {
  node.expanded = true;
});
this.gridOptions.api.onGroupExpandedOrCollapsed();

集团内部Api

Api有
expandAll
collapseAll

api.expandAll();
api.collapseAll();
请注意,由于AG网格的糟糕体系结构,如果行数据发生更改或网格被重新装入/重新呈现,则扩展状态(以及行选择等)将丢失。您应该使用
deltaRowDataMode
,但请确保为行提供唯一的ID,以帮助防止出现这种情况(虽然这个选项当然会导致一些我已经报告过的难以调试的bug)

此外,如果在这种情况下要恢复用户扩展,则除了迭代和扩展/折叠单个节点之外别无选择


此外,它们似乎不适用于主细节(企业功能)网格…

我希望这会有所帮助,性能似乎很好。参考-

但最好是检查团队是否存在。这样可以提高性能,并且扩展速度要快得多

this.gridApi.forEachNode((节点)=>{
if(节点?.group){
node.setExpanded(true)
}
})

我使用服务器端行模型,对我来说,它是更新数据后的purgeServerSideCashe()。它关闭所有扩展行

Hi@Jarod Moser感谢您的回复…我通过问题更新了更多详细信息,如我如何创建分组行。我尝试了您使用if条件if(node.group)提供的选项…对我来说,所有节点都是假的:)您可以检查node.canFlower但是,通过您的更新,我认为这不会太多地提高性能。看起来您正在使用角度组件来渲染全宽单元格。在ag网格上,建议不要这样做以提高速度。谢谢!Jarod…是的,根据文档,问题似乎在于我的代码我能做的是,我将在网格中加载50-100行,而不是150行,这样会更快。Hi@Jarod有更好的方法吗?Hi Jarod…我找到了更好的方法,比文档中提到的更早的方法快得多[这是最快的,在FF和Edge中不会中断或显示警报。150行耗时3-4秒。这只适用于clientSideModal,而不适用于serverSideModal。你能帮我查询一下吗?@user11363823给定的链接不起作用这些方法只适用于clientSideModal,不适用于ServerSideModalAs@SantoshKurdekar说,这些方法只支持客户端模型,不适用于服务器端模型。
api.expandAll();
api.collapseAll();