Angular ui-根据日期为空或不为空的网格过滤

Angular ui-grid filtering based on date is null or not null

在我的应用程序中,我使用 Angular ui-grid 以网格格式显示数据集。我想根据名为 actionDate 的日期字段过滤这些数据。我想过滤 actionDatenullnot null 的数据。我正在使用一个简单的下拉菜单 select 这个 .

但是当这个 actionDate 字段不为 null 时,过滤不起作用。我认为这不起作用的原因是 actionDate 字段具有不同的值,而 ui-grid 过滤器无法理解这一点。

我在下面的plunker中重现了这个问题。 http://plnkr.co/edit/8rIJeA92hDYQ9vHDUC1C?p=preview

如果有人能指出我正确的方向,我将不胜感激。

我在 this fork of your plunker 中解决了你的问题。

更新:好吧,我采用的解决方案是在 colDefs:

的末尾添加一个名为 dateActionedKey 的隐藏列
{ 
   field: 'dateActionedKey', 
   filter: {
     term: $scope.term
   }, 
   visible: false 
}

问题是您按事后分配的 属性 过滤列 - 如果没有 actionDate,则值为“1”,否则值为 actionDate -- 但您的过滤器选择器按 id 过滤,查找值“1”或“2”。

因此您需要更改 forEach 函数:

_.forEach(data, function (value) {
    value.dateActioned = value.dateActioned===null ? '1' : value.dateActioned;
});

至:

_.forEach(data, function (value) {
    value.dateActionedKey = value.dateActioned===null ? '1' : '2';
});

通过添加额外的 属性 dateActionedKey,您只需将二进制 1 或 2 值分配给它,您的显示不会有任何变化。由于这个不可见的列现在是七个列中的最后一个,您需要将过滤器术语分配更新为:

$scope.gridApi.grid.columns[6].filter.term = $scope.term;

希望对您有所帮助。