私はこのプロジェクトリストをJSONに持っています。プロジェクト名を検索し、他のフィールドを無視したいだけです。今私の問題は、他のフィールドも検索することです。他のフィールドに影響を与えずにパイプ内でのみプロジェクト名を使って検索するにはどうすればいいですか?ここで私が以下にしたことがあります。パイプで角をつけて使用するフィールドを1つだけ検索
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