angular自定义过滤器只返回boolean === true

时间:2016-08-25 21:47:09

标签: javascript angularjs ng-repeat angular-filters

我在Angular 1的ng-repeat列表中使用自定义过滤器。

过滤器已成功过滤搜索结果,但它无法正常工作。

目前,根据过滤器是否存在过滤结果。 例如'清洁'或'DIY'或'营销'

但是,过滤器检查布尔值是true还是false

因此,'cleaning:false'包含在与'cleaning:true'相同的ng-repeat中的结果

如果过滤器对象(例如清洁)评估为true,我只想返回结果。

我没有太多编写自己的过滤器的经验,所以任何输入或正确方向的推动都会真的赞赏!提前致谢!

以下是选项下拉选项:

<select class="sortBy" ng-model="selectedCat" ng-value="x.filter" ng-options="x.cat for x in taskCategories">
</select>

这是过滤器正在检查的数组,数组中的每个对象都有一个标题显示在下拉选择选项中,以及我希望它运行的过滤器:

$scope.taskCategories = [{
      'cat': 'All',
      'filter': ''
    }, {
      'cat': 'Cleaning',
      'filter': 'cleaning: true'
    }, {
      'cat': 'Moving & Delivery',
      'filter': 'moving: true'
    }, {
      'cat': 'DIY',
      'filter': 'DIY: true'
    }, {
      'cat': 'Marketing & Design',
      'filter': 'marketing: true'
    }, {
      'cat': 'Digital & IT',
      'filter': 'onlineIT: true'
    }, {
      'cat': 'Events & Photography',
      'filter': 'photoEvents: true'
    }, {
      'cat': 'Business & Admin',
      'filter': 'office: true'
    }, {
      'cat': 'Fun & Quirky',
      'filter': 'funQuirky: true'
    }, {
      'cat': 'Misc & Other ',
      'filter': 'misc: true'
    }];

以下是自定义过滤器:

.filter('customFilter', function() {
return function(items, search) {
  if (!search) {
    return items;
  }
  return items.filter(function(element) {

    //attempt 1      
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search.substring(0, search.indexOf(':'));
    });
    //attempt 2 
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search.substring(0, 2);
    });
    //attempt 3 
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search;
    });
    //attempt 4
    return Object.getOwnPropertyNames(element).find(function(x) {
      if(x === true) {
      return x === search.substring(0);
      }
    }); 

  });
 };
});

1 个答案:

答案 0 :(得分:0)

一种解决方案是使滤波器成为2种不同的属性吗?

所以就像{ 'cat': 'Moving & Delivery', 'filter': {'moving', true} }

一样

现在进入过滤器。 检查每个部分以决定是否应该添加。 因此,通过使用过滤器[1]检查它是否是相同的bool,并检查该项是否具有过滤器[0]的属性。

相关问题