使用OR而不是AND逻辑的角度过滤器

时间:2014-04-01 10:44:38

标签: angularjs

我有一些复选框和支票,表格过滤器值。但是如果我选择active和draft它没有显示任何东西,因为它正在实现AND逻辑,我需要使用OR逻辑的过滤器。

<div class="clearfix">
      <input data-ng-model="active" data-ng-true-value="active" class="pull-left" type="checkbox" id="active"/>
      <label class="pull-left" for="active">Active</label>
</div>
<div class="clearfix">
      <input data-ng-model="draft" data-ng-true-value="draft" class="pull-left" type="checkbox" id="draft"/>
      label class="pull-left" for="draft">Draft</label>
</div>


<table class="table">
<tr ng-repeat="campaign in dashboard.campaigns | filter:all | filter:active | filter:draft">
      <td>{{campaign.name}}</td>
      <td>{{campaign.startDate}}</td>
      <td>{{campaign.endDate}}</td>
      <td>{{campaign.status}}</td>
      <td>{{campaign.tasks}}</td>
</tr>

编辑: 这是解决方案

app.filter('byStatus', [function () {
    return function (campaigns, active, draft) {
        var tempCampaigns = [];

        angular.forEach(campaigns, function (campaign) {
            if(campaign.status == active || campaign.status == draft ){
                tempCampaigns.push(campaign);
            }
        });
        return tempCampaigns;
    };
}]);

<tr ng-repeat="campaign in dashboard.campaigns | byStatus:active:draft">

thx all;)

1 个答案:

答案 0 :(得分:1)

您只需要实现这样的自定义过滤器:

angular.module('App.filters', []).filter('activeOrDraft', [function () {
return function (campaigns) {
    if (!angular.isUndefined(campaigns)) {
        var tempCampaigns = [];
        angular.forEach(campaigns, function (campaign) {
          if (campaign.active || campaign.draft) {
            tempCampaigns.push(campaign);
          }
        });
        return tempCampaigns;
    } else {
        return campaigns;
    }
};
}]);

并使用它代替filter:active |过滤器:这样的草稿:

| activeOrDraft 

不确定代码中所有内容的含义,因此如果需要,请添加它。