如何在Angular MaterialTable中精确匹配来自select的过滤器字符串数据?
How to exactly match filter string data from select in Angular Material Table?
我正在尝试按产品名称或应用程序名称过滤我的 table。我已经将本指南 https://www.freakyjolly.com/angular-material-table-custom-filter-using-select-box/ 用于我的方法,并且一切正常,除了当生产或应用程序具有完全相同的相同字符串的一部分时的部分。
例如,如果我 select 在我的过滤器第二个应用程序中,它应该只显示我有第二个应用程序的行,而不是它显示名称中有“应用程序”的每一行。
我不知道如何编辑此过滤器逻辑以完全匹配来自 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;
}
我正在尝试按产品名称或应用程序名称过滤我的 table。我已经将本指南 https://www.freakyjolly.com/angular-material-table-custom-filter-using-select-box/ 用于我的方法,并且一切正常,除了当生产或应用程序具有完全相同的相同字符串的一部分时的部分。
例如,如果我 select 在我的过滤器第二个应用程序中,它应该只显示我有第二个应用程序的行,而不是它显示名称中有“应用程序”的每一行。
我不知道如何编辑此过滤器逻辑以完全匹配来自 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;
}