私のプロジェクトには、作業中の検索パイプがあります。それはテーブルに適用されます。テーブルには、製品名、カテゴリ、数量などの多くの列があります。パイプはすべてのフィールドを検索し、結果をフィルタリングします。大文字と小文字が区別されるので、大文字と小文字を区別しないようにしたいと思います。入力Mobile
すると結果が表示されますが、入力しても結果は表示されmobile
ません。
Search.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
import {isObject} from "rxjs/util/isObject";
import {isEmpty} from "rxjs/operator/isEmpty";
import {empty} from "rxjs/Observer";
@Pipe({
name: 'search'
})
export class SearchPipe implements PipeTransform
{
transform(input, searchString)
{
if (input == null) return input;
return input.filter(this.compareWithAllFields, searchString);
}
compareWithAllFields(value, index)
{
var fields = Object.keys(value);
for (let i = 0; i < fields.length; i++)
{
if (value[fields[i]] != null)
{
if (isObject(value[fields[i]]))
{
var childFields = Object.keys(value[fields[i]]);
if (childFields.length > 0)
{
for (let j = 0; j < childFields.length; j++)
{
if ((value[fields[i]][childFields[j]] + "").indexOf(this.toString()) !== -1)
{
return true;
}
}
}
}
if ((value[fields[i]] + "").indexOf(this.toString()) !== -1)
{
return true;
}
}
}
return false;
}
}
入力フォーム
<input placeholder="Enter Product Details to Search" class="form-control input-lg" type="text" #searchProduct
(keyup)="0">
使用法
<tr *ngFor="let product of products | search:searchProduct.value;let serial = index">