2015-09-01 8 views
1

Я пытаюсь фильтровать таблицу по столбцам, это таблица:Как я могу отфильтровать таблицу по столбцу?

<tr ng-repeat="row in rowCollection | filter: { person.lastName : lastName}"> 
     <td>{{row.person.firstName}}</td> 
     <td>{{row.person.lastName}}</td> 
     <td>{{row.person.birthDate | date:'shortDate'}}</td> 
     <td>{{row.person.balance}}</td> 
     <td>{{row.person.email}}</td> 
</tr> 

Данные выглядит следующим образом:

$scope.rowCollection = [ 
       {person:{firstName: 'Laurent', lastName: 'Renard', birthDate: new Date('1987-05-21'), balance: 102, email: '[email protected]'}}, 
       {person:{firstName: 'Blandine', lastName: 'Faivre', birthDate: new Date('1987-04-25'), balance: -2323.22, email: '[email protected]'}}, 
       {person:{firstName: 'Francoise', lastName: 'Frere', birthDate: new Date('1955-08-27'), balance: 42343, email: '[email protected]'}} 
]; 

Как можно фильтровать по столбцам в этом случае фамилия? Я не могу заставить его работать, когда json имеет более 1 уровня. plunkr: http://plnkr.co/edit/AFSoGw?p=preview

+0

Я изменил объявление фильтра на это '| filter: {person: {lastName: lastName}} ', но в начальной строке пуст - после того, как вы напишете что-нибудь для ввода и удалите его, он будет работать. Я не знаю, как исправить эту первую проблему, поэтому я не могу сказать, что я знаю ответ;) – rzysia

+0

Я отредактировал свой ответ, поэтому теперь он фильтрует только фамилию, дайте ей попробовать =) –

ответ

2

Вы должны добавить, что уровень в модели вашего поискового запроса, в так ng-model для ввода запроса должен быть person.lastName

filter on lastname: <input type="text" ng-model="person.lastName"> 
    <h3>Basic Smart-Table Starter</h3> 
    <table st-table="rowCollection" class="table table-striped"> 
     <thead> 
      <tr> 
       <th>first name</th> 
       <th>last name</th> 
       <th>birth date</th> 
      <th>balance</th> 
      <th>email</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr ng-repeat="row in rowCollection | filter: {'person':person}"> 
      <td>{{row.person.firstName}}</td> 
      <td>{{row.person.lastName}}</td> 
      <td>{{row.person.birthDate | date:'shortDate'}}</td> 
      <td>{{row.person.balance}}</td> 
      <td>{{row.person.email}}</td> 
     </tr> 
     </tbody> 
    </table> 

Смотрите этот обновленный plunker

+0

Это не поиск только в столбце lastname, но также и в первом имени. – Leeuwtje

+0

благодарит за заметку: –

+0

Удивительная хорошая работа – Leeuwtje

0

Просто,

ng-repeat="row in rowCollection | filter: lastName" 

будет фильтровать весь массив на основе значения, заданного пользователем.

PLUNKER

+0

Это фильтрует все столбцы, а не просто фамилия столбца – Leeuwtje

0

Для того, чтобы фильтровать lastName Вы можете просто обновить фильтр, если хотите знать, что с

<tr ng-repeat="row in rowCollection | filter:lastName"> 

Это фильтр rowCollection от lastName.

Но если вам нужен более строгий фильтр, в частности, фамилия, я считаю, что вы хотите определить более точный фильтр для своего приложения. Что-то вроде filterByLastName, которое будет проходить через элементы и проверять элементы, у которых есть имя, соответствующее этому имени.

Что-то в строках следующего;

.filter('filterByLastName', function() { 
    return function(items, lastName) { 
    var filtered = []; 
    if (lastName) { 
     for (var i = 0; i < items.length; i++) { 
     if (items[i].lastName === lastName) { 
      filtered.push[items[i]]; 
     } 
     } 
    } else { 
     filtered = items; 
    } 
    return filtered; 
    } 
}) 

Надеюсь, что это поможет!

Смежные вопросы