2017-05-09 107 views
1

我已经创建自定义的管道,从数据库中筛选我的数据敏感自定义过滤器的情况下

有管

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

} 

,并有我的搜索输入

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

它工作正常,但我有我的数据库记录像aaa,Abb,AbbB,cCc。

当我在搜索输入中输入内容时,它只返回小写或大写的元素。

例如:搜索 - > AAA 回归AAA而不是AAA和AAA

我应该如何改变它,实现它?

回答

1

更改管道下方

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

作品像魅力谢谢 – Defus

1

在服务器端逻辑中,当您搜索/比较它们时,将这两个术语都变为小写或大写。例如,如果您的服务器端语言是PHP,则使用strtolower();

问题是,如果你的数据库中的数据是AaA。我在你的搜索框aaa写:

  • 我应该有一个结果的数据AaA
  • 没有逻辑可以随机把aaaAaA

所以我们只是把一切aaaAAA

继PHP的例子,我们可以这样做:

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

更新1:

或多或少,与您的代码,这可能就像这样:

<?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(); 
?> 

在这种情况下,我们只添加$data与我们的搜索值相匹配的数据。我假定搜索字段名为search_data,并且表中的列名为searched_field

+0

给出还有就是我select.php https://pastebin.com/J9E7726E我应该在哪里放呢? – Defus

+0

@Defus我更新了我的答案。您必须通过POST以'search_data'值(输入搜索)的形式发送,并且它将返回与该值匹配的行。 – SrAxi

+0

但我怎样才能发送角2? – Defus