Angularjs 网格过滤器逗号
我使用的是ag网格,但当它过滤我的数据时会出现问题,当我过滤价格列中的数据时,它只适用于数字点,而不适用于逗号Angularjs 网格过滤器逗号,angularjs,ag-grid,Angularjs,Ag Grid,我使用的是ag网格,但当它过滤我的数据时会出现问题,当我过滤价格列中的数据时,它只适用于数字点,而不适用于逗号 Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview 实例: 在“价格”列中,选择“等于和高于”框,插入“1.5”,然后尝试插入“1,5”这是因为此筛选器是本机筛选器 如果要处理自定义行为,请定义自己的筛选器 文件: 一个快速而肮脏的解决方案是像这样对数字过滤器进行修补: NumberFilter.prototype.d
Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview
实例:
在“价格”列中,选择“等于和高于”框,插入“1.5”,然后尝试插入“1,5”这是因为此筛选器是本机筛选器 如果要处理自定义行为,请定义自己的筛选器 文件: 一个快速而肮脏的解决方案是像这样对数字过滤器进行修补:
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;
}
};
所以我发现了问题,首先我必须转换一个字符串,这个字符串比我需要的要多,用逗号替换点,上面答案的问题首先是因为数据类型和替换函数属性的顺序,但现在的问题是过滤不正确,如果我使用equal选项进行搜索,如果给我2个值,而不是一个固定值,代码如下所示: 代码:
NumberFilter.prototype.doesFilterPass=函数(节点){
if(this.filterNumber==null){
返回true;
}
var value=this.valueGetter(节点);
如果(!value&&value!==0){
返回false;
}
var值为个数;
如果(值的类型=='number'){
value=value.toString()
valueAsNumber=parseFloat(value.replace('.','.',');
}
否则{
valueAsNumber=parseFloat(value.replace('.','.',');
}
开关(this.filterType){
案例等于:
返回值asnumber==this.filterNumber;
大小写小于:
返回值asnumberthis.filterNumber;
违约:
//不应该发生
console.warn('invalid filter type'+this.filter type);
返回false;
}
};
可能的解决方案:
NumberFilter.prototype.onFilterChanged=函数(){
这是一个附带的问题,但ag grid是否被广泛使用?我在angular 2应用程序中使用它时遇到了一些问题,发现很难获得帮助。它不起作用,我仍然无法使用逗号过滤价格,只有点numbers@Thaenor如果您需要帮助,请访问ag网格论坛。Angularjs 2还很年轻,但开发人员在gr上非常活跃id,添加功能并支持更多框架。网格与angularjs2@MarcoPereira您能否使用控制台调试器检查value变量发生了什么?以及返回了什么值。replace(“,”,“.”)?@Thanor发生的事情是,值是有数字类型的,所以当调用replace时,它不会识别,因为这是字符串的一种方法,所以我做的是当调用它时,我转换值有一个字符串,而不是replace和convert有一个数字,但我仍然不能用点替换逗号,下面是代码示例:
valueAsNumber = parseFloat(value.replace(',','.'));
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;
}
};
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();
}
};