【问题标题】:Angular UI-Grid: How to Clear All (general Angular and built-in UI-Grid) Column Filters On Button ClickAngular UI-Grid:如何在按钮单击时清除所有(通用 Angular 和内置 UI-Grid)列过滤器
【发布时间】:2015-12-13 11:44:13
【问题描述】:

如何在单击按钮时清除刷新我的所有(通用 Angular 和内置 UI-Grid)过滤器?

背景:我已经构建了一个使用 UI-Grid 并利用 built-in filtering functionality 的应用程序。它还有一个用 Angular 编写的跨列搜索。

当前战斗我希望能够通过单击按钮来清除和刷新我的过滤器。到目前为止,我已经能够为跨列搜索实现它,但没有成功地为内置的列过滤器实现它(具有讽刺意味的是,我认为这会是最简单的部分!)。

对问题的研究:

1) 搜索了 UI-Grid 教程...失败

2) 查看提供的UI-Grid API ...部分成功!好像我想我在“clearAllFilters”函数(here is the source code)中找到了我想要的东西,但我不知道如何实现它,所以进入第 3 步......

3) 为实现演示/示例/帮助/提示/任何东西而疯狂地在 Google 上搜索!? ...失败

4) 在 Stack Overflow 上寻求帮助 :)

提前致谢。

【问题讨论】:

  • 您是否可以将控制器中网格绑定的变量重置为默认值?
  • @Matt - 是的,我想做的是重置列过滤器绑定的变量 - 你的建议与我重置角度跨列搜索的方式一致,它非常适合但是 ui-grid 过滤器是在 ui-grid js 代码中设置和维护的,这就是我在访问/重置时遇到的问题。

标签: angularjs filtering angular-ui-grid


【解决方案1】:

我认为这是一种简单的方法(只需将网格数据替换为原始/实际的 json 数据),您只需单击一个按钮即可创建并调用下面的 clearFilters 函数。

$scope.clearFilters = function() {
        $scope.yourGridOptions.data = $scope.originalData;
    }

【讨论】:

    【解决方案2】:

    请试试这个:

    $scope.gridApi.core.clearAllFilters();
    

    $scope.gridApi 来自我的 ui-grid 元素的初始设置

     $scope.gridOptions = {
            flatEntityAccess: true,
            paginationPageSizes: [10, 25, 50, 75, 100],
            paginationPageSize: 25,
            enableFiltering: true,
            enableColumnResizing: true,
            enableGridMenu: true,
            onRegisterApi: function (gridApi) {
                $scope.gridApi = gridApi;
            },
            columnDefs: [{
    

    【讨论】:

    • @ArepalliPraveenkumar:尝试以下由 hic 提供的解决方案。它有效:)
    【解决方案3】:

    对不起,我没有看到 ui 网格的 clearAllFilters() 函数。所以它变得更简单。你可以这样做:

      $scope.clearFilters = function() {
                $scope.myGridApi.grid.clearAllFilters();
            };
    

    【讨论】:

    • @techprat 这是不久前的事,我无法再访问代码(以前的工作),所以虽然这确实有效,但我不记得我最终修改的细节。查看 api 文档,我看到函数 clearAllFilters 最多需要三个参数,如果您查看code,您会发现根据您想要的行为,您可能必须设置这些参数才能获得预期的结果。所以简短的回答是肯定的 - 但你可能必须使用参数来获得你想要的功能。
    【解决方案4】:

    你可以这样做:

    //获取网格api

    $scope.myGridOptions.onRegisterApi = function(gridApi) {
      $scope.myGridApi=gridApi;
    }
    

    您必须将此功能绑定到您的清除按钮:

            $scope.clearFilters = function() {
                var columns = $scope.myGridApi.grid.columns;
                    for (var i = 0; i < columns.length; i++) {
                        if (columns[i].enableFiltering) {
                            columns[i].filters[0].term='';
                        }
                    }
                };
    

    【讨论】:

    • 如何捕捉事件?
    • 但这不会清除在自定义过滤器上选择的值。无论如何,这会在此线程上获得此问题的最佳答案。
    • 添加列[i].filters[0].listTerm='';也解决了我清除选定过滤器的问题。
    • 感谢您发布此@laurenOlga。我正在与块上的新开发者一样的野兽搏斗,使用非常服务、组件和模板繁重、丰富的应用程序,所以这有点令人生畏。虽然我还没有取得重大进展,但我只是想花点时间感谢您提出一个经过深思熟虑和可读性的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2015-10-04
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多