Angularjs 网格过滤器逗号

Angularjs 网格过滤器逗号,angularjs,ag-grid,Angularjs,Ag Grid,我使用的是ag网格,但当它过滤我的数据时会出现问题,当我过滤价格列中的数据时,它只适用于数字点,而不适用于逗号 Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview 实例: 在“价格”列中,选择“等于和高于”框,插入“1.5”,然后尝试插入“1,5”这是因为此筛选器是本机筛选器 如果要处理自定义行为,请定义自己的筛选器 文件: 一个快速而肮脏的解决方案是像这样对数字过滤器进行修补: NumberFilter.prototype.d

我使用的是ag网格,但当它过滤我的数据时会出现问题,当我过滤价格列中的数据时,它只适用于数字点,而不适用于逗号

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();
        }
    };