简而言之:有没有办法为数字列过滤器实现自定义比较器?
很长的故事:
我在 Angular (2) 中使用 ag-grid。我为我的 ag-grid 中的单元格提供了我自己的组件:
let column = {
headerName: column.header,
field: column.id,
cellRendererFramework: DynamicComponent,
filter: this.convertFormatToFilterType(column.format) // returns "text", "number" or "date"
}
为了使过滤器正确地从我的单元格中获取值,我提供了自定义比较器(这个用于文本列过滤器):
if (c.filter === "text")
c['filterParams'] = {
textCustomComparator: (filter, cell, filterText): boolean => {
var filterTextLowerCase = filterText.toLowerCase();
var valueLowerCase = cell.value.toString().toLowerCase();
switch (filter) {
case 'contains':
return valueLowerCase.indexOf(filterTextLowerCase) >= 0;
case 'notContains':
return valueLowerCase.indexOf(filterTextLowerCase) === -1;
case 'equals':
return valueLowerCase === filterTextLowerCase;
case 'notEqual':
return valueLowerCase != filterTextLowerCase;
case 'startsWith':
return valueLowerCase.indexOf(filterTextLowerCase) === 0;
case 'endsWith':
var index = valueLowerCase.lastIndexOf(filterTextLowerCase);
return index >= 0 && index === (valueLowerCase.length - filterTextLowerCase.length);
default:
// should never happen
console.warn('invalid filter type ' + filter);
return false;
}
}
};
您可以看到我需要使用“cell.value”访问单元格的值。上面的代码工作正常。
我遇到的麻烦是为数字列过滤器提供类似的功能——它们似乎没有使用任何自定义比较器。因此,发生了什么,过滤器尝试直接访问单元格的值,而不是使用“cell.value”。
那么,有没有办法为数字列过滤器实现自定义比较器?或者,如果没有,在这种情况下,我可以通过其他任何方式正确地从我的单元格中获取值吗?