如何根据其值隐藏ui网格中的某些行?

时间:2016-03-03 21:04:19

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

我有一个简单的UI网格,包含以下选项:

$scope.transactionGrid = {
    enableSorting : true,
    enableColumnResize : true,
    enableScrollbars : true,
    enablePaginationControls : false,
    minRowsToShow : 6,
    onRegisterApi : function(gridApi) {
        $scope.gridEventsApi = gridApi;
    }
};

我想要隐藏具有特定值deleted: "y"

的行
$scope.transactionGrid.data = [
    { Name: "First", deleted: "y" },
    { Name: "Second", deleted: "y" },
    { Name: "Third", deleted: "n" },
    { Name: "Fourth", deleted: "n" }
];

如果没有实际更改数据,是否可以从行中过滤出来?

3 个答案:

答案 0 :(得分:5)

一种方法是调整行中继器模板以检查某些特定于行的值,并使行显示/隐藏。 我创建了a Plunkr来展示可能的解决方案。

首先,您需要创建行值检查器功能:

appScopeProvider: {
  showRow: function(row) {
    return row.deleted !== 'y';
  }
},

然后通过将该检查添加到其行中继器

来调整其模板
$templateCache.put('ui-grid/uiGridViewport',  
  ...
  ng-if=\"grid.appScope.showRow(row.entity)\"
  ...
}

答案 1 :(得分:1)

您可以通过创建单元格模板来隐藏它,并根据每个字段的行值隐藏它:

$scope.transactionGrid = {
    enableSorting : true,
    enableColumnResize : true,
    enableScrollbars : true,
    enablePaginationControls : false,
    minRowsToShow : 6,
    onRegisterApi : function(gridApi) {
        $scope.gridEventsApi = gridApi;
    }

    // Column template definitions:
    columnDefs: [
        {
            name: 'Name',
            displayName: 'Name',
            cellTemplate : '<div ng-if="row.entity.deleted">{{row.entity.Name}}</div>'
        }
    ]
};

我制作了一个Plunk,以展示解决此问题的可行技术:https://plnkr.co/edit/XQRC45vaiZCySZYkEGrz?p=preview

答案 2 :(得分:1)

我知道你明确说过&#34;没有实际更改数据&#34;,但是将过滤的数据集分配给网格不会改变数据集,只会改变网格的数据。对于像这样的其他案例,它也可能是一个相关且有效的解决方案。

我分叉CMR&#39;} Plunk来证明这一点:http://plnkr.co/edit/NntwWb?p=preview

关键部分是在分配数据集时添加filter

$scope.gridOptions = {
    data: $scope.myData.filter(function(row) {
        return row.deleted !== "y";
    })
};