2017-05-09 2 views
1

J'ai créé tuyau personnalisé pour filtrer mes données de base de donnéesFiltre personnalisé sensible à la casse

Il y a tuyau

import { Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'filter' 
}) 
export class FilterPipe implements PipeTransform { 

    transform(aliases: any, term: any): any { 
    // check if search term is undefined 
    if (term === undefined) return aliases; 
    // return updated array 
    return aliases.filter(function(alias){ 
     return alias.local_part.includes(term) || alias.domain.includes(term); 
    }); 
    } 

} 

et il y a mon entrée de recherche

<form id="filter"> 
      <div class="input-group custom-search-form"> 
       <input type="text" placeholder="Search" class="form-control" [(ngModel)]="term" name="filter"> 
       <span class="input-group-btn"> 
      <button class="btn btn-primary" type="button"> 
      <i class="fa fa-search"></i> 
       </button> 
       </span> 
      </div> 
     </form> 

cela fonctionne bien, mais J'ai dans ma base de données des dossiers comme aaa, Abb, AbbB, cCc.

Et quand je tape quelque chose dans l'entrée de recherche, il renvoie uniquement les éléments où est des cas ou supérieure inférieure.

Par exemple: Recherche -> aaa aaa de retour mais pas Aaa et AaA

Comment dois-je changer pour y parvenir?

Répondre

1

Changer votre pipe comme indiqué ci-dessous

private transform(aliases: any, term: any): any { 
     let filter; 
     let newValue; 
     // check if search term is undefined 
     if (term === undefined) { 
      return aliases; 
     } else if (term) { 
      filter = term.toLocaleLowerCase(); 
     } 

     if (filter && aliases) { 
      newValue = aliases.filter((alias) => alias.local_part.toLocaleLowerCase().indexOf(filter) !== -1 || alias.domain.toLocaleLowerCase().indexOf(filter) !== -1); 
     } else { 
      newValue = aliases; 
     } 
     // return updated array 
     return newValue; 
    } 
+0

Fonctionne comme un charme merci – Defus

1

Dans la logique côté serveur tourner les deux termes en majuscules ou minuscules lorsque vous êtes à la recherche/les comparer. En utilisant strtolower(); si votre langage côté serveur est PHP, par exemple.

La chose est que si vous avez des données qui est AaA dans votre DB. Et j'écrire dans votre boîte de recherche aaa:

  • je devrais avoir comme conséquence les données AaA
  • Il n'y a pas de logique qui peut tourner au hasard aaa en AaA

Nous tournons juste que tout aaa ou AAA.

Suivant l'exemple PHP, nous pourrions faire quelque chose comme:

if (strtolower($_POST['search_data']) == strtolower($db_data) { 
    // do something 
} 

Mise à jour 1:

Plus ou moins, avec votre code, cela pourrait se faire comme ceci:

<?php 
include ('db.php'); 

$sql = "SELECT * FROM aliases"; 

$result = $conn->query($sql); 
if($result->num_rows > 0){ 
    $data = array(); 
    while($row = $result->fetch_assoc()) { 
    if (strtolower($_POST['search_data']) == strtolower($row['searched_field']) 
    { 
     $data[] = $row; 
    } 

    } 
    echo json_encode($data); 
} else { 
    echo "0"; 
} 
$conn->close(); 
?> 

Dans ce cas, on ajoute à $data uniquement les données correspondant à notre valeur recherche. J'ai supposé que le champ de recherche s'appelait search_data et que la colonne de votre tableau s'appelait searched_field.

+0

Il est mon select.php https://pastebin.com/J9E7726E où dois-je dire? – Defus

+0

@Defus J'ai mis à jour ma réponse. Vous devez envoyer via POST le formulaire avec la valeur 'search_data' (la recherche d'entrée) et il vous retournera les lignes qui correspondent à cette valeur. – SrAxi

+0

mais comment puis-je l'envoyer en angulaire 2? – Defus