我正在使用ag-Grid,但在过滤我的数据时存在问题,当我在价格列中过滤我的数据时,它只适用于数字点而不是逗号。
Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview
实际例子: 在价格栏中,选择框等于及以上插入" 1.5"而不是尝试插入" 1,5"
答案 0 :(得分:1)
这是因为此过滤器是原生过滤器。
如果要处理自定义行为,请定义自己的过滤器。
文档:https://www.ag-grid.com/angular-grid-filtering/index.php
一个快速而肮脏的解决方案就是像这样修补NumberFilter:
NumberFilter.prototype.doesFilterPass = function (node) {
if (this.filterNumber === null) {
return true;
}
var value = this.valueGetter(node);
if (!value && value !== 0) {
return false;
}
var valueAsNumber;
if (typeof value === 'number') {
valueAsNumber = value;
}
else {
valueAsNumber = parseFloat(value.replace(',','.'));
}
switch (this.filterType) {
case EQUALS:
return valueAsNumber === this.filterNumber;
case LESS_THAN:
return valueAsNumber < this.filterNumber;
case GREATER_THAN:
return valueAsNumber > this.filterNumber;
default:
// should never happen
console.warn('invalid filter type ' + this.filterType);
return false;
}
};
然后更改了行:
valueAsNumber = parseFloat(value.replace(',','.'));
答案 1 :(得分:0)
所以我发现了问题,首先我必须转换该值有一个字符串,而不是用逗号替换点所需要的,上面的答案的问题首先是因为数据类型而不是属性的顺序替换函数,但现在的问题是没有正确过滤,如果我使用相等选项搜索如果给我2个值,而不是固定的,代码看起来像这样:
代码:
NumberFilter.prototype.doesFilterPass = function (node) {
if (this.filterNumber === null) {
return true;
}
var value = this.valueGetter(node);
if (!value && value !== 0) {
return false;
}
var valueAsNumber;
if (typeof value === 'number') {
value = value.toString()
valueAsNumber = parseFloat(value.replace('.',','));
}
else {
valueAsNumber = parseFloat(value.replace('.',','));
}
switch (this.filterType) {
case EQUALS:
return valueAsNumber === this.filterNumber;
case LESS_THAN:
return valueAsNumber < this.filterNumber;
case GREATER_THAN:
return valueAsNumber > this.filterNumber;
default:
// should never happen
console.warn('invalid filter type ' + this.filterType);
return false;
}
};
答案 2 :(得分:0)
可能的解决方案:
NumberFilter.prototype.onFilterChanged = function(){
var filterText = utils_1.default.makeNull(this.eFilterTextField.value);
if (filterText && filterText.trim() === '') {
filterText = null;
}
var newFilter;
if (filterText !== null && filterText !== undefined) {
console.log(filterText);
// replace comma by dot
newFilter = parseFloat(filterText.replace(/,/g, '.'));
console.log(newFilter);
}
else {
newFilter = null;
}
if (this.filterNumber !== newFilter) {
this.filterNumber = newFilter;
this.filterChanged();
}
};