Фильтр поиска по конкретным атрибутам объекта - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь отфильтровать некоторые задачи в таблице только по атрибутам, которые я даю в таблице, но панель поиска также дает задачи, которые имеют другие атрибуты, совпадающие с входными данными. Т.е. есть логический атрибут, и когда я набираю «true» в строке поиска, задачи остаются, даже если у них нет этой строки в отображаемом имени. Вы знаете, как я мог ограничить поиск только этими атрибутами?

<input type="text" ng-model="searchFilter">
<table>
    <tr ng-repeat="task in taskList | filter: searchFilter"> 
        <td>{{task.task_desc_1}}</td>                                
        <td>{{task.task_desc_2}}</td>                                
        <td>{{task.task_desc_3}}</td>                                
        <td>{{task.task_bv_ref}}</td>                               
    </tr>      
</table>

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете создать свой собственный канал (класс, который реализует PipeTransform с аннотацией @Pipe). Метод перегрузки transform (), как показано ниже:

@Pipe({
name: 'searchTask'
})
export class SearchTaskPipe implements PipeTransform {
transform(tasks: Task[], searchText: string): Task[] {
    if(!tasks){
      return [];
    }
    if(!searchText){
      return tasks;
    }

    searchText=searchText.trim(); 
    searchText=searchText.toLowerCase();

    return tasks.filter(t=>{
      if(t.task_desc_1.toLowerCase().includes(searchText)||
     t.task_desc_2.toLowerCase().includes(searchText)||
    t.task_desc_3.toLowerCase().includes(searchText)||
    t.task_bv_ref.toLowerCase().includes(searchText)||
    ){
        return true;
      }
    }
}
}

Добавьте эту трубу в ваши объявления NgModule. Тогда в своем HTML вы можете использовать его, как показано ниже:

 <tr ng-repeat="task in taskList | searchTask: searchFilter"> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...