如何在 Ag 网格企业版中的自定义获取上下文菜单项上扩展一个父 node/group 元素内的所有子节点
how to expand all child nodes inside one parent node/group element on custom get context menu items in Ag grid Enterprise version
我用的是ag grid企业版。我有一个自定义上下文菜单,里面有很多父节点,每个父节点里面都有嵌套的子节点 nodes.Currently 我可以按父级别展开它,但不知道如何展开所有子节点同时。任何帮助将不胜感激。谢谢
{
name: 'Expand All',
action() {
params.api.forEachNode((node, index) => {
if (node.group && node.groupData['ag-Grid-AutoColumn'] ===
params.value) {
node.setExpanded(true);
}
});
}
我在使用 AG Grid 时遇到了同样的问题,不幸的是我在 AG Grid API 中找不到任何有用的东西来实现这个功能。所以我不得不以这种方式实现它:
name: 'Expand All',
action: () => {
let totalChildNodes = 0;
let checkCount = 0;
params.api.forEachNode((node, index) => {
if (node.group && node.groupData['ag-Grid-AutoColumn'] === params.value) {
totalChildNodes = node.allChildrenCount;
node.expanded = true;
}
if (totalChildNodes > 0 && checkCount <= totalChildNodes) {
checkCount++;
node.expanded = true;
}
});
params.api.onGroupExpandedOrCollapsed();
}
上面的代码所做的是检查被点击的节点并获取它的子节点数,然后展开它的所有子节点。
我通过使用辅助方法定义子节点解决了这个问题:
getChildNodes(clickedNode:RowNode):RowNode[]{
let haveEnteredChildZone:boolean = false;
let haveLeftChildZone:boolean = false;
let childNodes:RowNode[] = [];
this.gridApi.forEachNode((n=>{
if(n.id === clickedNode.id){haveEnteredChildZone = true; return;}
if(haveEnteredChildZone && n.level === clickedNode.level){ haveLeftChildZone = true; return;}
if(haveEnteredChildZone && !haveLeftChildZone){
childNodes.push(n)
}
}))
return childNodes;
}
下面的代码使用这个辅助方法来扩展子节点,如果它们的级别足够深,可以满足我的要求:
drillRowToLevel(params, level) {
let childNodes:RowNode[] = this.getChildNodes(params.node); //get child nodes
childNodes.forEach(n=>{
this.gridApi.setRowNodeExpanded(n,n.level<level) //set child nodes expanded
})
this.gridApi.setRowNodeExpanded(params.node,params.node.level < level); //expand self
this.gridApi.onGroupExpandedOrCollapsed(); //enact the expansion changes
}
您可以通过将级别硬编码到最高级别来展开所有子节点来简化第二种方法。
我用的是ag grid企业版。我有一个自定义上下文菜单,里面有很多父节点,每个父节点里面都有嵌套的子节点 nodes.Currently 我可以按父级别展开它,但不知道如何展开所有子节点同时。任何帮助将不胜感激。谢谢
{
name: 'Expand All',
action() {
params.api.forEachNode((node, index) => {
if (node.group && node.groupData['ag-Grid-AutoColumn'] ===
params.value) {
node.setExpanded(true);
}
});
}
我在使用 AG Grid 时遇到了同样的问题,不幸的是我在 AG Grid API 中找不到任何有用的东西来实现这个功能。所以我不得不以这种方式实现它:
name: 'Expand All',
action: () => {
let totalChildNodes = 0;
let checkCount = 0;
params.api.forEachNode((node, index) => {
if (node.group && node.groupData['ag-Grid-AutoColumn'] === params.value) {
totalChildNodes = node.allChildrenCount;
node.expanded = true;
}
if (totalChildNodes > 0 && checkCount <= totalChildNodes) {
checkCount++;
node.expanded = true;
}
});
params.api.onGroupExpandedOrCollapsed();
}
上面的代码所做的是检查被点击的节点并获取它的子节点数,然后展开它的所有子节点。
我通过使用辅助方法定义子节点解决了这个问题:
getChildNodes(clickedNode:RowNode):RowNode[]{
let haveEnteredChildZone:boolean = false;
let haveLeftChildZone:boolean = false;
let childNodes:RowNode[] = [];
this.gridApi.forEachNode((n=>{
if(n.id === clickedNode.id){haveEnteredChildZone = true; return;}
if(haveEnteredChildZone && n.level === clickedNode.level){ haveLeftChildZone = true; return;}
if(haveEnteredChildZone && !haveLeftChildZone){
childNodes.push(n)
}
}))
return childNodes;
}
下面的代码使用这个辅助方法来扩展子节点,如果它们的级别足够深,可以满足我的要求:
drillRowToLevel(params, level) {
let childNodes:RowNode[] = this.getChildNodes(params.node); //get child nodes
childNodes.forEach(n=>{
this.gridApi.setRowNodeExpanded(n,n.level<level) //set child nodes expanded
})
this.gridApi.setRowNodeExpanded(params.node,params.node.level < level); //expand self
this.gridApi.onGroupExpandedOrCollapsed(); //enact the expansion changes
}
您可以通过将级别硬编码到最高级别来展开所有子节点来简化第二种方法。