Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Angular 2 Помогите реализовать фильтр (https://javascript.ru/forum/angular/75136-angular-2-pomogite-realizovat-filtr.html)

AndreyAndreyKiev 05.09.2018 11:52

Angular 2 Помогите реализовать фильтр
 
Доброго времени суток,

Есть json в component.ts :
data:JSON = [{name:"Вася",lastname:"Иванов",age:"25"},{name:"Боб",lastname:"Додсон",age:"18"}];


и в component.html :
<div id="filter">
  <div><label for="name">Имя</label> <input id="name" type="text">  </div>

  <div><label for="lastname">Фамилия</label> <input id="lastname" type="text"> </div>

  <div><label for="age">Возраст</label> <input id="age" type="number"> </div>
</div>


<div *ngFor="let item of data, let i=index">
 <p>{{ item.name }} {{item.lastname}}</p>
 <p>Возраст: {{ item.age }}</p> 
</div>


Нужно сделать так, чтобы когда, например, пишешь в фильтре имени "вас", из div`a *ngFor исчезали все div`ы, у которых в имени нет подстроки "вас", т.е. останется только Вася (data[0]).
:help: :help: :help: :help: :help:

destus 05.09.2018 13:39

https://codeburst.io/create-a-search...4-21fd3a5bec5c

AndreyAndreyKiev 05.09.2018 21:21

Там показано как сделать фильтр для простого массива, можете подсказать как сделать для массива с json объектами? Как в моём примере
data:JSON = [{name:"Вася",lastname:"Иванов",age:"25"},{name:"Боб",lastname:"Додсон",age:"18"}]

Очень срочно нужно, Angular 4 пока плохо знаю и не могу написать такой pipe

destus 06.09.2018 06:51

<input id="name" type="text" [(ngModel)]="searchText" />

<div *ngFor="let item of data | filter : searchText">
 <p>{{ item.name }} {{item.lastname}}</p>
 <p>Возраст: {{ item.age }}</p> 
</div>

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {
  transform(items: any[], searchText: string): any[] {
    if(!items) return [];
    if(!searchText) return items;
	searchText = searchText.toLowerCase();
	return items.filter( it => {
		  return it.name.toLowerCase().includes(searchText);
    });
   }
}

AndreyAndreyKiev 06.09.2018 10:38

Спасибо огромное вам:dance: :thanks: :thanks: :thanks: :thanks:


Часовой пояс GMT +3, время: 13:40.