angular - 如何精确匹配 Angular 材料表中选择的过滤器字符串数据?
问题描述
我正在尝试按生产或应用程序名称过滤我的表。我已将本指南https://www.freakyjolly.com/angular-material-table-custom-filter-using-select-box/用于我的方法,除了生产或应用程序的一部分之外,一切正常相同的字符串完全相同。
例如,如果我在我的过滤器第二个应用程序中选择它应该只显示我有第二个应用程序的行,而不是它显示名称中有“应用程序”的每一行。
我不知道如何编辑此过滤器逻辑以完全匹配来自 select 的字符串
// Custom filter method fot Angular Material Datatable
createFilter() {
let filterFunction = function (data: any, filter: string): boolean {
let searchTerms = JSON.parse(filter);
let isFilterSet = false;
for (const col in searchTerms) {
if (searchTerms[col].toString() !== '') {
isFilterSet = true;
} else {
delete searchTerms[col];
}
}
let nameSearch = () => {
let found = false;
if (isFilterSet) {
for (const col in searchTerms) {
searchTerms[col].trim().toLowerCase().split(' ').forEach(word => {
if (data[col].toString().toLowerCase().indexOf(word) != -1 && isFilterSet) {
found = true
}
});
}
return found
} else {
return true;
}
};
return nameSearch()
};
return filterFunction
}
解决方案
我想我设法做到了这一点,它可以按我的意愿工作。我只是按列完全过滤:
filterValues = {
prodName: '',
appName: ''
};
然后我写了这个过滤器:
columnFilter(): (data: any, filter: string) => boolean {
let filterFunction = function(data, filter): boolean{
let searchTerms = JSON.parse(filter);
return data.prodName.toLowerCase().indexOf(searchTerms.prodName) !== -1
&& data.appName.toLowerCase().indexOf(searchTerms.appName) !== -1;
};
return filterFunction;
}
推荐阅读
- laravel - 有什么方法可以将 foreach 值存储在数据库中
- c# - 数据类型 varchar 和 varchar 在减法运算符 c# web 服务中不兼容
- xamarin - 错误消息 APK 未安装在 Xamarin 表单中
- angular - Angular 中的 MIME 类型问题
- java - weblogic上的Rest API-将根据请求有效负载生成线程-如何控制线程数
- css - 使用类的列表中的 CSS 选择器
- geocoding - 我可以使用 Geocoder API 从 here.com 保存响应(特别是坐标)吗?
- php - 印度时区在默认 php 时区设置中落后 40 分钟
- java - @Autowired Spring Boot 组件在父基类中初始化,但在子类中恰好为 null
- ios - 在 Xcode 11 中,Live Preview 按钮下方的按钮是什么?