Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AG网格(企业)列菜单侦听器_Javascript_Angular_Ag Grid_Ag Grid Angular - Fatal编程技术网

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