ng表编号范围筛选器不起作用

ng-table number range filter is not working

本文关键字:不起作用 筛选 范围 编号 ng      更新时间:2023-09-26
  • 我想做什么

我正试图使我的一列(在一列中(采用两个数字,这样我就可以按范围过滤该列的数字数据。所有其他排序、分页和按"包含文本"进行筛选都很好,但我不确定如何使一个特定列具有"范围"筛选器。

  • 我想要的图形表示

    column_header1    columns_header2         column_header3
    contain_filter1   contain_filter2         filter3_min_number
                                              filter3_max_number
      data                 data                   numeric data
        .                    .                          .
        .                    .                          .
        .                    .                          .
    
  • 到目前为止我有什么

我在ng表模块网站上找到了一个例子,我试图将他们的代码实现到我的代码中,但当我必须在"getData"中实现range函数时,我不知道如何实现它。我发现的例子http://codepen.io/christianacca/pen/yNWeOP"年龄"数据的自定义过滤算法就是我所关注的。

  • 我的app.js

    $http.get("http://hostname:port/variant/whole/1-10000", {cache: true})
        .then(function (response) {
            $scope.variants = response.data;
            $scope.data = $scope.variants;
            var self = this;
            self.variantFilterDef = {
                start: {
                    id: 'number',
                    placeholder: 'Start'
                },
                end: {
                    id: 'number',
                    placeholder: 'End'
                }
            };
            self.variantsTable  = new NgTableParams({
                page:1,
                count: 10
            }, {
                filterOptions: { filterFn: variantRangeFilter },
                dataset: $scope.data,
                filterLayout: "horizontal"
            });
            function variantRangeFilter(data, filterValues/*, comparator*/){
                return data.filter(function(item){
                    var start = filterValues.start == null ? Number.MIN_VALUE : filterValues.start;
                    var end = filterValues.end == null ? Number.MAX_VALUE : filterValues.end;
                    return start <= item.pos && end >= item.pos;
                });
            }
    
            /* from this part on, it is working code but no 'Range'  function
    
            $scope.variantsTable = new NgTableParams({
                page: 1,
                count: 10
            }, {
                total: $scope.variants.length,
                getData: function (params) {
                    if (params.sorting()) {
                        $scope.data = $filter('orderBy')($scope.variants, params.orderBy());
                    } else {
                        $scope.data = $scope.variants;
                    }
                    if (params.filter()) {
                        $scope.data = $filter('filter')($scope.data, params.filter());
                    } else {
                        $scope.data = $scope.data;
                    }
                    $scope.data = $scope.data.slice((params.page() - 1) * params.count(), params.page() * params.count());
                    return $scope.data;
            }
    
        });
    
    
    
     */
    
      });
    
    });
    
    • my variant.html

        <table ng-table="variantsTable" show-filter="true" class="table table-bordered table-striped table-condensed">
            <tr ng-repeat="variant in $data">
      
         <td data-title="'chrom'" sortable="'chrom'" filter="{ 'chrom': 'text' }" >
      {{variant.chrom}}
         </td>
        <td data-title="'id'" sortable="'id'" filter="{ 'id': 'text' }" >
      {{variant.id}}
        </td>
      
        <td data-title="'pos'" sortable = "'pos'" filter = "{ 'pos': 'text' }">
      {{variant.pos}}
        </td>
      

如果有任何建议或意见,我将不胜感激,谢谢!

ID表单元格的filter属性不正确。

<td data-title="'id'" sortable="'id'" filter="{ 'id': 'text' }">
    {{variant.id}}
</td>

更改为:

<td data-title="'id'" sortable="'id'" filter="variantFilterDef">
    {{variant.id}}
</td>

编辑

经过一点尝试和错误,我使它工作。我从您的代码示例开始,做了一些更改。我使用了ControllerAs语法。但本质上的修复是:

  1. <td data-title="'chrom'" sortable="'chrom'" filter="{ 'chrom': 'text' }">

    <td data-title="'chrom'" sortable="'chrom'" filter="{ 'name': 'text' }">

  2. <td data-title="'pos'" sortable = "'pos'" filter = "{ 'pos': 'text' }">

    <td data-title="'pos'" sortable="'pos'" filter="variantCtrl.variantFilterDef">

  3. if (params.filter()) { self.data = $filter('filter')(self.data, {name: params.filter().name}); self.data = variantRangeFilter(self.data, params.filter()); } else { self.data = self.data; }

主要问题是需要通过使用{name: params.filter().name})&然后单独调用自定义Pos过滤器。

代码笔:http://codepen.io/anon/pen/QKBYOq?editors=1011