2016-12-28 54 views
1

這裏是我的JSON:數據過濾器 「從,到」 角

[ 
    { 
     "name": "2QQQJohnQQQ11_12_1998", 
     "age" : "18" 
    }, 
    { 
     "name": "1QQQEvaQQQ05_11_1989", 
     "age" : "21" 
    }, 
    { 
     "name": "4QQQCasperQQQ12_06_1994", 
     "age" : "13" 
    }, 
    { 
     "name": "3QQQBeanQQQ30_12_1996", 
     "age" : "6" 
    }] 

我的HTML:

<thead> 
        <tr> 
         <th class="text-center">type</th> 
         <th class="text-center">name</th> 
         <th class="text-center">date</th> 
         <th class="text-center">age</th> 
        </tr> 
       </thead> 
       <tbody> 
        <tr ng-repeat="name in namesplit | filter:dateFilterFunction | orderBy:'time'"> 
         <td>{{name.type}}</td> 
         <td>{{name.name}}</td> 
         <td>{{name.time | date}}</td> 
         <td>{{name.age}}</td> 
        </tr> 
       </tbody> 

我的JavaScript文件:

var app = angular.module('app', []); 
    app.service('service', function($http, $q){ 
     var deferred = $q.defer(); 

     $http.get("datesss.json").then(function(data){ 
      deferred.resolve(data); 
     }); 

     this.getNames = function(){ 
      return deferred.promise; 
     } 
    }); 
    app.controller('secondCtrl', function($scope, service){ 
     var promise = service.getNames(); 
     promise.then(function(data){ 
      $scope.names = data.data; 
      $scope.namesplit = $scope.names; 
      $scope.namesplit.map(function(item) { 
       item.type = item.name.split('QQQ')[0]; 
       item.data = item.name.split('QQQ')[2].split('_'); 
       item.name = item.name.split('QQQ')[1]; 
       item.time = new Date(parseInt(item.data[2],10),parseInt(item.data[1],10)-1,parseInt(item.data[0],10)); 
     }); 
    }); 
}); 

我做一個表,什麼我試圖做的是過濾「從,到」過濾數據(name.time)。我在HTML代碼:

<input type="date" ng-model="dateFilter.from" class="form-control" /> 
<input type="date" ng-model="dateFilter.to" class="form-control" /> 

我的代碼在控制器:

$scope.dateFilter={}; 
       $scope.dateFilterFunction= function(name){ 
        return (name.time>$scope.dateFilter.from && name.time<$scope.dateFilter.to); 
     } 

沒有奏效。有人幫忙?提前致謝。

+0

什麼是你的代碼的輸出,我的意思是你現在得到些什麼? –

+0

我的表格中沒有任何內容,但是當我從ng-repeat中刪除「filter:dateFilterFunction」時,我的所有內容都可以工作 – bafix2203

+0

您是否僅在輸入時沒有值的情況下出錯?在這種情況下,嘗試用空值初始化你的過濾器,$ scope.dateFilter = {from:null,to:null}; –

回答

1

試試這個date filter

我們需要如下聲明過濾器: -

.filter('dateFilterFunction',function(){ 
    return function(data, from, to) { 
    if (!from && !to) return data; 
    var newData = []; 
    angular.forEach(data, function(item){ 
     if (item.time >= from && item.time <= to) { 
      newData.push(item); 
     } 

    }); 
    return newData; 
    }; 
}); 
+0

你能給我一個提示,在這個過濾器中改變什麼來過濾數據只有「for」,沒有「to」? – bafix2203

+1

所以,如果你不需要'to',你可以刪除第三個參數,使它看起來像'return function(data,from)'並將'dateFilterFunction:dateFilter.from:dateFilter.to'更改爲'dateFilterFunction:dateFilter。從'基本上刪除'dateFiler.to'。每個':'都可以作爲將參數傳遞給過濾函數的方式。 – bhantol

+0

我的意思是,過濾器可以過濾「從,到」和單獨「從」或單獨「到」:)非常感謝您的答案! – bafix2203