0

私のプロジェクトには、作業中の検索パイプがあります。それはテーブルに適用されます。テーブルには、製品名、カテゴリ、数量などの多くの列があります。パイプはすべてのフィールドを検索し、結果をフィルタリングします。大文字と小文字が区別されるので、大文字と小文字を区別しないようにしたいと思います。入力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">
4

1 に答える 1

1

String.prototype.toLowerCase()勝利のために:

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]] + "").toLowerCase().indexOf(this.toString().toLowerCase()) !== -1)
                        {
                            return true;
                        }
                    }
                }
            }
            if ((value[fields[i]] + "").toLowerCase().indexOf(this.toString().toLowerCase()) !== -1)
            {
                return true;
            }
        }
    }
    return false;
}

参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase

于 2016-11-04T15:49:36.560 に答える