2016-11-13 3 views
0

Я пытаюсь отфильтровать список по временным рамкам. Я использую angularjs, bootstrap datetimepicker и moment.js. Но что происходит, я не могу перечислить данные. Без настраиваемого фильтра я могу показать список, а также выполнить простой поиск текстового фильтра. Я добавил код, связанный с настраиваемым фильтром.Datetime range custom filter not working

код, связанный с фильтра в контроллере

App.controller('ReportController', ['$scope', 'Report','$filter', function($scope, Report, 
$filter){ 
     var self = this; 

     $filter('myfilter')(dateFrom ,dateTo); 

     App.filter('myfilter', function() { 
     return function(items, from, to) { 
     var result = [];   
      for (var i=0; i<items.length; i++){ 
      var test = new Date(items[i].dateTime.$date); 
      var month = test.getMonth()+1; 
      var date = test.getDate(); 
      var year = test.getFullYear(); 
      var hour = test.getHours(); 
      var minute = test.getMinutes(); 
      var second = test.getSeconds(); 
      var newDate = year+"-"+month+"-"+date+""+hour+"-"+minute+"-"+second;   
      if (newDate > from && newDate < to) { 
        result.push(items[i]); 
        } 
       }    
      return result; 
      }; 
      }); 
     }]); 

В Html

<div ng-show="Sradioption == 'showSearch2'" class='input-group date' id='datetimepicker6'> 
     <input type='text' ng-model="dateFrom" class="form-control" /> 
     <span class="input-group-addon"> 
     <span class="glyphicon glyphicon-calendar"></span> 
     </span> 
</div> 
<div ng-show="Sradioption == 'showSearch2'" class='input-group date' id='datetimepicker7'> 
    <input type='text' ng-model="dateTo" class="form-control" /> 
    <span class="input-group-addon"> 
    <span class="glyphicon glyphicon-calendar"></span> 
    </span> 
</div> 

<table class="table table-hover"> 
<thead> 
    <tr> 
    <th>C_Number</th> 
    <th>Datetime</th> 
    <th>Reading</th> 
    </tr> 
</thead> 
<tbody> 
<tr ng-repeat="r in ctrl.reports | filter:search | myfilter:dateFrom:dateTo"> 
    <td>{{r.c_Number}}</td> 
    <td>{{r.dateTime}}</td> 
    <td>{{r.reading}}</td> 
    </tr> 
</tbody> 
</table> 
+0

вы используете фильтр в обоих контроллер и ng-repeat .... Я думаю, что одного достаточно .... какую ошибку вы получаете в консоли? – Hemakumar

+0

Я получаю сообщение об ошибке: [$ injector: unpr] Неизвестный поставщик: myfilterFilterProvider <- myfilterFilter – user3844782

+0

вы можете создать плункер – Sajeetharan

ответ

1

Вы должны вынуть фильтр из контроллера,

App.filter('myfilter', function() { 
    return function(items, from, to) { 
     var result = []; 
     for (var i = 0; i < items.length; i++) { 
      var test = new Date(items[i].dateTime.$date); 
      var month = test.getMonth() + 1; 
      var date = test.getDate(); 
      var year = test.getFullYear(); 
      var hour = test.getHours(); 
      var minute = test.getMinutes(); 
      var second = test.getSeconds(); 
      var newDate = year + "-" + month + "-" + date + "" + hour + "-" + minute + "-" + second; 
      if (newDate > from && newDate < to) { 
       result.push(items[i]); 
      } 
     } 
     return result; 
    }; 
});