【问题标题】:Ag-Grid Filter CommaAg-Grid 过滤器逗号
【发布时间】:2016-06-15 12:28:12
【问题描述】:

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

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

实例: 在价格列选择框等于及以上插入“1.5”,然后尝试插入“1,5”

【问题讨论】:

    标签: angularjs ag-grid


    【解决方案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(',','.'));
    

    【讨论】:

    • 有点偏题,但 ag-grid 被广泛使用吗?我在使用 Angular 2 应用程序时遇到了一些问题,并且发现很难获得帮助。
    • 它不起作用,我仍然无法使用逗号过滤价格,只能使用点数
    • @Thaenor 如果您需要帮助,请访问 ag-grid 论坛。 Angularjs 2 还很年轻,但开发人员目前在网格上非常活跃,添加了功能并支持更多的框架来使用。网格确实与 angularjs2 集成
    • @MarcoPereira 你能用控制台调试器检查值变量会发生什么吗?以及什么返回 value.replace(',','.') ?
    • @Thaenor 发生的事情是该值具有 typeof 数字,所以当被称为替换时它不会重新识别,因为这是字符串的一种方法,所以我所做的是当它被调用时我转换该值有一个字符串,而不是替换和转换有一个数字,但我仍然不能用点替换逗号,这里是代码示例:pastebin.com/ZzsvnDEi
    【解决方案2】:

    所以我发现了问题,首先我必须转换值有一个字符串,而不是用逗号替换点,上面答案的问题首先是因为数据类型而不是属性的顺序的替换功能,但现在的问题是过滤不正确,如果我使用相等选项搜索如果给我 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;
                }  
    };
    

    【讨论】:

      【解决方案3】:

      可能的解决方案:

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

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 2019-07-28
        • 2022-10-17
        • 2019-04-20
        • 2018-02-06
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        相关资源
        最近更新 更多