自定义ng-filter,用于匹配范围内的日期值

时间:2016-04-08 20:04:20

标签: javascript angularjs datetime

我正在尝试创建一个过滤器,用于过滤ng-repeat中的项目以查找其日期。例如,在div标题"今天"仅显示在每个项目日期属性中设置今天日期的项目。我希望在标记中得到类似的结果:

<li class="{{todo.category}}" ng-repeat="todo in todos | taskDate : today">
    {{todo.title}}
</li>

todo结构示例: (日期是通过AngularUI引导程序指令生成的,因此不是100%格式化它们。)

$scope.todos = [
{name : 'Complete 5 tasks',
category: 'Life',
date: ''}
]

目前我的方法和过滤器在这里:

Date.prototype.sameDay = function(d) {
    return this.getFullYear() === d.getFullYear() && this.getDate() === d.getDate() && this.getMonth() === d.getMonth();
};


app.filter("taskDate", function() {
    return function(input, date) {
        var todaysDate = new Date();
        var filtered = [];
        angular.forEach(input, function(todo, index) {
            if (todo.date instanceof Date) {
                if (todo.date.sameDay(todaysDate)) {
                    filtered.push(todo);
                }
            } else if (todo.date == date) {
                // filtered.push(todo);
            }
        });

        return filtered;
    };
});

当我使用以下过滤器

 |taskDate 
时,这适用于显示具有今天日期的项目,但我无法弄清楚如何扩展它以显示明天等等。

编辑:设法让过滤器适用于今天,但不是其他日期

1 个答案:

答案 0 :(得分:1)

我认为你可以使用Angular的原生过滤器来帮助:

 <li class="{{todo.category}}" ng-repeat="todo in todos | filter:todoFilter('today')">


$scope.todoFilter= function(date) {
    return function(todo) {
        if(date==='today' && todo.date=== $scope.todaysDate)){
            return true;
        }
    }
}

Example Fiddle