2016-11-11 4 views
1

У меня есть таблица, отображающая информацию о пользователе. У нас есть окно поиска вверху, которое позволяет пользователю вводить текст и выбирать тип для поиска из раскрывающегося списка.Угловой фильтр поиска 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; 
      } 
     }); 

Это работает только для столбца Name. Для столбца даты существует разница в формате и, поскольку хобби находится во внутреннем цикле, пользователь не отображается в списке, даже если текст поиска находится в разделе «Увлечения». Может ли кто-нибудь помочь с фильтром, который удовлетворяет всем этим значениям?

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

@Jenny: он работает на дату рождения, если вы выберете его и введите приемлемый формат даты (05.01.99, 05-01-1999 и т. Д.). – o4ohel