使用外部过滤隐藏/显示列

时间:2018-01-11 21:31:41

标签: javascript angularjs filter angular-ui-grid ui-grid

我正在使用启用外部过滤的ui-grid。我已经注册了处理程序:

            gridApi.core.on.filterChanged($scope, getFilters);

            gridApi.core.on.columnVisibilityChanged($scope, function (column) {
                column.filters[0].term = null;
                ctrl.gridApi.core.raise.filterChanged();
            });

我看到的问题是,当我在过滤输入框中输入内容时,过滤按预期工作,我得到了结果的子集。现在我继续尝试隐藏过滤列,过滤术语仍在那里。我想要的是重置我尝试在columnVisibilityChanged监听回调中执行的过滤器。我看到所有的回调都会触发,但是当我获取数据时,隐藏的列会重新添加回网格中。我的外部过滤重新填充了grid.data数组,没有别的。

1 个答案:

答案 0 :(得分:0)

这里的价值在于我如何解决这个问题:

                gridApi.core.on.columnVisibilityChanged($scope, function (column) {
                    // must find a column on the appScope and set its visibility property
                    _.forEach(ctrl.gridApi.grid.appScope.columns, function(appScopeColumn){
                        // find filterable column
                        if (column.enableFiltering && column.field === appScopeColumn.id) {
                            appScopeColumn.visible = column.visible;
                            // only trigger filterChanged event if the column's filter was set
                            if(column.filters[0].term) {
                                ctrl.gridApi.core.raise.filterChanged();
                            }
                        }
                    });

                });