首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngTables中的角度自定义过滤

ngTables中的角度自定义过滤
EN

Stack Overflow用户
提问于 2014-06-17 20:43:06
回答 2查看 5.1K关注 0票数 3

我正在尝试在ngTables (类似于this example)中进行一些自定义过滤,但使用的是文本输入字段。我有一组带有标准文本输入过滤器的列,对于其中一些列,我希望使用自己的过滤函数,而不是默认的angular $filter('filter')(array, params.filter()),而是类似$filter('myOwnFilter')(array, params.filter())的函数

过滤发生在我的控制器中:

代码语言:javascript
复制
var orderedData = params.filter() ? $filter('filter')(array, params.filter()) : array;

我所拥有的:

代码语言:javascript
复制
<td class="text-left" data-title="'Name'" filter="{ 'Column': 'myOwnFilter' }" data-sortable="'Column'">
  {{ array.Column }}
</td>

和模板:

代码语言:javascript
复制
<script type="text/ng-template" id="ng-table/filters/myOwnFilter.html">
  <input type="text" name="myOwnFilter" data-ng-model="params.filter()[name]" data-ng-if="filter == 'myOwnFilter'" class="input-filter form-control"/>
</script>
EN

回答 2

Stack Overflow用户

发布于 2014-12-05 03:24:42

正如问题https://stackoverflow.com/a/27296677/61577所回答的,你必须在你的控制器中使用一个自定义的“比较器”函数作为第三个参数。一个简单的例子

代码语言:javascript
复制
var myCustomComparator = function(value, searchTerm) {
    return (value || '').indexOf(searchTerm) > -1;
}

然后在你的getData回调中

代码语言:javascript
复制
var orderedData = params.filter() ? $filter('filter')(array, params.filter(), myCustomComparator) : array;

只需注意,您必须检查params.filter(),以防需要对不同的列/字段使用不同的比较器。

filter comparator的angular文档

票数 4
EN

Stack Overflow用户

发布于 2018-03-14 22:35:01

假设你想添加一个过滤器,它只显示属性avg 大于-你的过滤器的行:

视图

代码语言:javascript
复制
<td data-title="'Average'" sortable="'avg'" filter="{ 'min': 'number' }">

控制器

代码语言:javascript
复制
vm.filtered = params.filter() ? filterData(params, vm.filtered) : vm.filtered;

和自定义过滤器

代码语言:javascript
复制
function filterData(params, data) {
              var min;
              if (params.filter() && params.filter().min) {
                  //remove default params.filter().min filter
                  min = params.filter().min;
                  delete params.filter().min;
                  //filter data by min
                  data = _.filter(data, function (d) { return min <= d.avg; });
              }
              //use the normal filter
              data = params.filter() ? $filter('filter')(data, params.filter()) : data;
              if (min != undefined)//add it back
                  params.filter().min = min;
              return data;
          }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24264139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档