2016-11-04 3 views
0

Ich habe eine funktionierende Suche Rohr in meinem Projekt. Es wird auf einen Tisch aufgetragen. Tabelle hat viele Spalten wie Produktname, Kategorie, Menge usw. Die Rohrleitung durchsucht alle Felder und filtert das Ergebnis. Es ist Groß-und Kleinschreibung und ich möchte es Groß-und Kleinschreibung nicht beachten. Wenn ich Mobile gebe, zeigt es die Ergebnisse an, aber wenn ich mobile gebe, zeigt es keine Resultate an.Angular 2 - Case insensive Suche mit Rohr

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; 
    } 
} 

Eingabeformular

<input placeholder="Enter Product Details to Search" class="form-control input-lg" type="text" #searchProduct 
           (keyup)="0"> 

Usage

<tr *ngFor="let product of products | search:searchProduct.value;let serial = index"> 

Antwort

1

String.prototype.toLowerCase() für den Sieg:

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; 
} 

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

+0

jetzt Works. Vielen Dank – usmanwalana