基于日期的角度ui-grid过滤为null或不为null

时间:2016-02-20 11:49:43

标签: javascript angularjs ng-grid angular-ui-grid angular-filters

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

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

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

感谢是否有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

我已在this fork of your plunker修复了您的问题。

更新:好的,我使用的解决方案是在dateActionedKey的末尾添加一个名为colDefs的隐藏列:

{ 
   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;

希望这会对你有所帮助。