Ag-Grid过滤器逗号

时间:2016-03-02 15:02:19

标签: angularjs ag-grid

我正在使用ag-Grid,但在过滤我的数据时存在问题,当我在价格列中过滤我的数据时,它只适用于数字点而不是逗号。

Link: https://plnkr.co/edit/LDdrRbANSalvb4Iwh5mp?p=preview

实际例子: 在价格栏中,选择框等于及以上插入" 1.5"而不是尝试插入" 1,5"

3 个答案:

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