이 프로젝트 목록은 JSON에 포함되어 있으므로 프로젝트 이름을 검색하고 다른 필드는 무시하고 싶습니다. 내 문제는 이제 다른 필드를 검색한다는 것입니다. 어떻게 다른 필드가 영향을 미치지 않고 내 파이프에서만 프로젝트 이름을 사용하여 검색을 수행 할 수 있습니까? 여기에 내가 한 일이 있습니다.파이프를 각도로 사용하여 하나의 필드 만 검색
JSON
{
"token": "ejsk0e",
"projects": [
{
"id": 5,
"name": "Store",
"description": "Small",
"organization_id": 1,
"created_at": "2017-10-29 10:31:50",
"updated_at": "2017-11-14 06:27:03",
"material_projects": [
{
"id": 18,
"material_id": 40,
"project_id": 5,
"quantity": 10,
"unit": "pcs",
"created_at": "2017-11-02 09:57:14",
"updated_at": "2017-11-02 09:57:14",
"material": {
"id": 40,
"sku": "ACWNAIL",
"name": "Banana",
"created_at": "2017-10-26 03:19:54",
"updated_at": "2017-10-26 03:23:21"
},
"categories": [
{
"id": 8,
"name": "Fruits",
"created_at": "2017-10-26 07:36:48",
"updated_at": "2017-11-10 02:06:07",
"pivot": {
"material_proj_id": 18,
"category_id": 8
}
}
],
"material_name": "Banana",
"material_sku": "ACWNAIL",
"category_name": "Fruits"
}
]
}
TS
getAllProjects() {
this.subscription = this.projectsService.getAll()
.subscribe(
(data:any) => {
this.projects = data.projects;
},
error => {
console.log(error);
});
}
,HTML
<div class="container-fluid">
<input placeholder="Search..."" type="text" [(ngModel)]="searchProj">
<div class="row" *ngFor="let project of projects | search : searchProj">
<div class="card-block">
<h2 class="proj-name">{{ project.name }}</h2>
</div>
</div>
</div>
PIPE.ts
export class SearchPipe implements PipeTransform {
transform(items: any, term: any): any {
if (term === undefined) return items;
return items.filter(function(item) {
for(let property in item){
if (item[property] === null){
continue;
}
if(item[property].toString().toLowerCase().includes(term.toLowerCase())){
return true;
}
}
return false;
});
}
}
필터링 작업에 파이프를 사용해서는 안되며, 필터링은 CPU 집약적 인 작업이며 필요에 따라 파이프 변경은 모든 단일 변경 감지주기에 트리거됩니다.이 방법은 응용 프로그램 성능이 저하 될 수 있으므로 더 나은 방법은 관찰 가능 항목을 사용하는 것입니다 필요할 때만 필터링을 실행합니다. – bryan60