我已经创建了自定义管道来过滤数据库中的数据
有管道
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。
当我在搜索输入中输入内容时,它只返回小写或更高的元素。
例如:搜索 - &gt; AAA 返回aaa而不是AaA和Aaa
我应该如何改变它来实现它?
答案 0 :(得分:1)
在服务器端逻辑中,当您搜索/比较它们时,将两个术语转换为小写或大写。例如,如果您的服务器端语言是PHP,则使用strtolower();
。
如果您的数据库中有AaA
的数据,那就是问题。我在您的搜索框aaa
中写道:
AaA
aaa
转换为AaA
所以我们只需将所有内容都转为aaa
或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
。
答案 1 :(得分: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;
}