是的。您应该使用 Moment 的 isAfter 方法定义自定义过滤器。
可以在http://onehungrymind.com/build-custom-filter-angularjs-moment-js/上找到一个示例
他们对过滤器的定义,他们甚至可以配置截止日期:
.filter('isAfter', function() {
return function(items, dateAfter) {
// Using ES6 filter method
return items.filter(function(item){
return moment(item.date).isAfter(dateAfter);
})
}
})
或者,如果您不想使其可配置:
.filter('isFuture', function() {
return function(items) {
return items.filter(function(item){
return moment(item.date).isAfter(new Date());
})
}
})
应用它:
ng-repeat="event in events | isAfter:date"
或
ng-repeat="event in events | isFuture"
更新:
您想让日期属性的名称可配置。你可以这样做。调用它的技巧是item.date 与item['date'] 相同。
第二个技巧是您可以使用|| 为参数提供默认值。 param || 'default' 将使用参数值(如果提供),'default'(如果未定义)。
所以
.filter('isFuture', function() {
return function(items, dateFieldName) {
return items.filter(function(item){
return moment(item[dateFieldName || 'date']).isAfter(new Date());
})
}
})
然后在 ng-repeat 你得到默认值:
ng-repeat="event in events | isFuture"
或指定字段名称:
ng-repeat="event in events | isFuture:'deadline'"