Javascript AG网格(企业)列菜单侦听器
有没有办法将侦听器设置为列菜单,以便在打开和关闭菜单时触发事件 功能描述: 我已经在官方文件中搜索过了,但没有找到答案 背景是: 我想将表状态与显示的列、排序、列的位置、过滤器等一起存储在数据库中。当然,我可以使用类似于Javascript AG网格(企业)列菜单侦听器,javascript,angular,ag-grid,ag-grid-angular,Javascript,Angular,Ag Grid,Ag Grid Angular,有没有办法将侦听器设置为列菜单,以便在打开和关闭菜单时触发事件 功能描述: 我已经在官方文件中搜索过了,但没有找到答案 背景是: 我想将表状态与显示的列、排序、列的位置、过滤器等一起存储在数据库中。当然,我可以使用类似于onFilterChanged、onDisplayedColumnsChanged或onSortChanged的侦听器。 问题是,它将在每次发生更改时被触发,因此会产生大量不需要的api调用 这就是为什么我想在列菜单关闭时执行one调用的原因 更新 正如维卡斯在他的报告中所说的
onFilterChanged
、onDisplayedColumnsChanged
或onSortChanged
的侦听器。
问题是,它将在每次发生更改时被触发,因此会产生大量不需要的api调用
这就是为什么我想在列菜单关闭时执行one调用的原因
更新 正如维卡斯在他的报告中所说的那样,没有官方的方法可以做到这一点。我 尝试使用
后处理弹出窗口
避免解决方案,并尝试寻找清洁剂
我的问题的解决方案-存储表状态
对于在ColumnMenu关闭时使用回调的解决方法,更合适
请注意,这不是回调本身的解决方法-它只是一个(可能的)解决方案,用于存储表状态并执行一个API调用
我使用了Angular的ngOnDestory()
函数
ngOnDestory():void{
常量表状态={
columnState:this.gridOptions.columnApi.getColumnState(),
columnGroupState:this.gridOptions.columnApi.getColumnGroupState(),
sortState:this.gridOptions.api.getSortModel(),
filterState:this.gridOptions.api.getFilterModel(),
displayedColumns:this.gridOptions.columnApi.getAllDisplayedColumns()
};
//提交给API
}
你说得对,没有正式的方法。一个解决方法是自己检测菜单何时关闭。Ag grid确实为您提供了PostProcessPopupParams
回调(请参阅),它提供了类型为PostProcessPopupParams
的参数;它包含显示的列菜单弹出元素,因此您可以在菜单不再可见时进行检查
创建用于存储columnMenu元素的变量:
columnMenu: any = null;
使用ag grid事件后处理弹出窗口将columnMenu存储在此变量中:
<ag-grid-angular [postProcessPopup]="postProcessPopup"></ag-grid-angular>
this.postProcessPopup = function(params) {
this.columnMenu = params.ePopup;
}.bind(this);
这有点老套,是一个解决办法,但我现在想不出更好的办法
请看一下Plunker以获取说明
this.renderer.listen('window', 'click',(e:Event)=>{
console.log(this.columnMenu)
const columnMenuIsInDom = document.body.contains(this.columnMenu);
if (!columnMenuIsInDom && this.columnMenu != null)
{
this.columnMenu = null;
}
});