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

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

4

2 回答 2

1

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

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

  • 结果我应该有数据AaA
  • 没有可以随机变成的aaa逻辑AaA

所以我们只是把一切都变成aaaor AAA

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

于 2017-05-09T10:20:32.423 回答
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;
    }
于 2017-05-09T11:00:46.337 回答