2016-09-07 9 views
0

ngのリピート内の日付を比較は私が持っている私のコントローラで

calendar date: 2016-09-01T00:00:00 
today: "2016-09-07T16:58:12.434Z" 

方法day.dateが以上の場合にのみ表示されるng-ifを上記に追加することはできますかこの例のように10

何か(それが動作しません):

<tr ng-repeat="week in vm.calendar"> 
    <td ng-repeat="day in week track by $index"> 
     <div ng-if="day.date >= vm.today"> 
      calendar date: {{ day.date }}<br> 
      today: {{ vm.today }} 
     </div> 
    </td> 
</tr> 

ありがとう!

P.S.既にsimilar questionがありますが、私の問題では役に立たなかったようです。

+0

にNG-かの条件を変更して、あなたがだけではなく、日付でフィルタリングする必要はありませんか?それがここにあります:http://stackoverflow.com/q/25515431/215552 –

答えて

1

このような場合は、2つのパラメータを受け入れてブール値を返すコントローラ関数を作成する必要があります。また、日付を文字列と比較している可能性があるので、意味のある比較を実行する前に解析が必要であると考えてください。だからあなたのdivタグは<div ng-if="vm.shouldDateBeShown(day.date, vm.today)">ようになりますし、あなたの関数が解析して比較を行うにmoment(私の個人的な好み)のようなライブラリを使用する必要があります。

vm.shouldDateBeShown = function(dt, today){ 
    var datea = moment(dt); 
    var dateb = moment(today); 
    return datea.diff(dateb, 'days') >= 0; 
} 
+0

これは素晴らしいです。関数を 'ng-if'に渡すことができるかどうかわかりませんでした。ありがとう! – crowhill

0

あなたはフィルタを作成することができます。

<td ng-repeat="day in week track by $index | dateCompare"> 

JS:

.filter('dateCompare',function(){ 
      var arrFinalWeek = []; 
      return function(weekInChild,weekDataFromParent){ 

        var timeStamp = new Date(date).getTime(); 
        weekInChild.forEach(function(date,key){ 

          if(new Date(date).getTime() >= timeStamp){ 
           arrFinalWeek = arrFinalWeek.concat(date); 
//depend on requirement u can delete it from existing or 
//concat new array and return it 
          } 
        }); 

       return arrFinalWeek; 
      } 
     }) 
0

ng-if="day.date >= vm.today.toJSON()"

<tr ng-repeat="week in vm.calendar"> 
    <td ng-repeat="day in week track by $index"> 
     <div ng-if="day.date >= vm.today.toJSON()"> 
      calendar date: {{ day.date }}<br> 
      today: {{ vm.today }} 
     </div> 
    </td> 
</tr> 

Fiddle example

関連する問題