如何根据其值隐藏 ui-grid 中的某些行?
How do I hide certain rows in a ui-grid based on its values?
我有一个带有这些选项的简单 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" }
];
在不实际更改数据的情况下,是否可以从行中过滤掉?
一种方法是调整 row-repeater-template 以检查某些特定于行的值并使行 show/hide 如此。
我创建了 a Plunkr 来展示可能的解决方案。
首先您需要创建行值检查函数:
appScopeProvider: {
showRow: function(row) {
return row.deleted !== 'y';
}
},
然后您通过将检查添加到他们的行中继器来调整他们的模板
$templateCache.put('ui-grid/uiGridViewport',
...
ng-if=\"grid.appScope.showRow(row.entity)\"
...
}
您可以通过创建单元格模板来隐藏它,并根据每个字段的行值隐藏它:
$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
我知道你特别说过 "without actually changing the data",但是将过滤后的数据集分配给网格不会更改数据集,只会更改网格的数据。对于像这样的其他情况,它也可能是相关且有效的解决方案。
我分叉了CMR's Plunk to demonstrate this: http://plnkr.co/edit/NntwWb?p=preview
关键部分只是在分配数据集时添加一个filter
:
$scope.gridOptions = {
data: $scope.myData.filter(function(row) {
return row.deleted !== "y";
})
};
我有一个带有这些选项的简单 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" }
];
在不实际更改数据的情况下,是否可以从行中过滤掉?
一种方法是调整 row-repeater-template 以检查某些特定于行的值并使行 show/hide 如此。 我创建了 a Plunkr 来展示可能的解决方案。
首先您需要创建行值检查函数:
appScopeProvider: {
showRow: function(row) {
return row.deleted !== 'y';
}
},
然后您通过将检查添加到他们的行中继器来调整他们的模板
$templateCache.put('ui-grid/uiGridViewport',
...
ng-if=\"grid.appScope.showRow(row.entity)\"
...
}
您可以通过创建单元格模板来隐藏它,并根据每个字段的行值隐藏它:
$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
我知道你特别说过 "without actually changing the data",但是将过滤后的数据集分配给网格不会更改数据集,只会更改网格的数据。对于像这样的其他情况,它也可能是相关且有效的解决方案。
我分叉了CMR's Plunk to demonstrate this: http://plnkr.co/edit/NntwWb?p=preview
关键部分只是在分配数据集时添加一个filter
:
$scope.gridOptions = {
data: $scope.myData.filter(function(row) {
return row.deleted !== "y";
})
};