3

我想添加過濾器來過濾ng-repeat日期大於今天的日期。
例如,選中複選框時只顯示日期大於今天的日期,並取消選中全部顯示。
這裏是我的嘗試:如何使用大於ng-repeat的日期過濾ng-repeat

$scope.gteComparator = function (a, b) { 
    return new Date(a) >= new Date(b); 
}; 
$scope.greaterThan = function (prop, val) { 
    return prop > val; 
} 

在視圖:

ng-repeat="row in myModel" | filter: firstFilter| | filter:{ 'DateColumn': (new Date()) }:gteComparator 

| filter: greaterThan('DateColumn', new Date()) 

但沒有工作,我該怎麼辦?

+0

回答你的問題:http://stackoverflow.com/questions/25515431/ NG-重複濾波數據按日期範圍 –

回答

1

在視圖:

ng-repeat="row in myModel | myFilter" 

控制器代碼:

var nameSpace = angular.module('tst',[]); 
nameSpace.controller('MyController', function MyController($scope) { 
//controller here 
}); 

nameSpace.filter("myfilter", function() { 
    return function(items) { 
    var arrayToReturn = [];   
    for (var i=0; i<items.length; i++){ 
     var date = items[i].date; 
     if (date > new Date()) { 
      arrayToReturn.push(items[i]); 
     } 
    } 

    return arrayToReturn; 
}; 
}); 
0

angular.module('app', []); 
 

 
angular.module('app').filter('greaterThanToday',() => { 
 
    const now = new Date(); 
 
    const day = now.getDate(); 
 
    const month = now.getMonth(); 
 
    const year = now.getFullYear(); 
 
    const tomorrow = new Date(year, month, day + 1); 
 
           
 
    return (dates) => { 
 
    return dates.filter((date) => date - tomorrow >= 0); 
 
    }; 
 
}); 
 

 
angular.module('app').controller('Example', function() { 
 
    this.dates = []; 
 
    
 
    for (let i = 0; i <= 100; i++) { 
 
    const diff = Math.round(100 * Math.random() - 50) * 24 * 60 * 60 * 1000; 
 
    this.dates.push(new Date(new Date().getTime() + diff)); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="Example as Ex"> 
 
    <div ng-repeat="date in Ex.dates | greaterThanToday">{{date | date:"yyyy.MM.dd"}}</div> 
 
</div>