2016-11-11 81 views
1

我有一個顯示用戶信息的表格。我們在頂部有一個搜索框,允許用戶輸入文本並從下拉菜單中選擇要搜索的類型。Angular js搜索過濾器(ng-repeat內的日期和ng-repeat)

<input type="text" ng-model=search> 
<select ng-model=searchBy> 
    <option value="$">All</option> 
    <option value="Name">Name</option> 
    <option value="DoB">Date of birth</option> 
    <option value="Hobbies">Hobby</option> 
</select> 

<div ng-repeat="user in users | filter:searchFilter"> 
    <div>{{user.Name}}</div> 
    <div>{{user.DoB | date: "MM/dd/yyyy"}}</div> 
    <div ng-repeat="hobby in user.Hobbies">{{hobby}}</div> 
</div> 

在javascript中:

Object.defineProperty($scope, "searchFilter", { 
      get: function() { 
       var out = {}; 
       out[$scope.searchBy || "$"] = $scope.search; 
       return out; 
      } 
     }); 

這是爲名稱列唯一的工作。對於日期列,格式有所不同,因爲業餘愛好在內部循環中,即使搜索文本在愛好中,用戶也不會顯示在列表中。有人可以幫助一個滿足所有這些值的過濾器嗎?

TIA。

+0

在您試圖實現這一目標的任何代碼? – ZombieChowder

回答

0

可能有更好的解決辦法,但是這可能工作:

的JavaScript:

Object.defineProperty($scope, "searchFilter", { 
    get: function() { 
    var out = {}; 
    var search = $scope.search; 
    if(!search) { 
     return {'$': ''}; 
    } 
    if($scope.searchBy === 'DoB') { 
     search = new Date(search).getTime(); 
    } 
    if($scope.searchBy === 'Hobbies') { 
     $scope.users.forEach(function(n) { 
     n.hobbyStr = n.Hobbies.join(','); 
     }); 
     $scope.searchBy = 'hobbyStr'; 
    } 
    out[$scope.searchBy || "$"] = search; 
    return out; 
    } 
}); 

這裏還有一個plnkr

+0

這個plnkr不能正常工作?出生日期,它沒有顯示任何東西。儘管如此,它仍然是爲了業餘愛好。 – Jenny

+0

@珍妮:它適用於出生日期假設您選擇它並鍵入一個可接受的日期格式(05.01.99,05-01-1999等) – o4ohel