Angular自定义过滤器只返回布尔值=== true的结果

angular custom filter only return results where boolean === true

本文关键字:true 结果 布尔值 返回 自定义 过滤器 Angular      更新时间:2023-09-26

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

过滤器成功过滤搜索结果,但是它不工作,因为我需要它。

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

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

所以'cleaning: false'的结果和'cleaning: true'的结果包含在同一个ng-repeat中

我只想在过滤器对象(例如清洁)计算为true时返回结果。

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

下面是选项select下拉列表:

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

一个解决方案是使过滤器是2个不同的属性?

设置为{ 'cat': 'Moving & Delivery', 'filter': {'moving', true} }

现在进入你的过滤器。对照每一部分,决定是否添加。因此,通过使用filter[1]检查其是否为相同的bool值,并检查项是否具有filter[0]的属性。