Javascript AngularJS,仅当变量为true时过滤

Javascript AngularJS,仅当变量为true时过滤,javascript,angularjs,Javascript,Angularjs,我有一个ng重复与许多过滤器 (1) 从输入字段: <input type="text" ng-model="search"> 它还连接到自定义筛选器filtraZona 然后我有一个ng重复,只有选中复选框openfilterazone时,过滤器filterazona才应处于活动状态 我不知道只有选中了openfilterazone时,在repeater表达式上加什么才能应用过滤器 <tr ng-repeat="cliente in clienti | filter:sea

我有一个ng重复与许多过滤器

(1) 从输入字段:

<input type="text" ng-model="search">
它还连接到自定义筛选器
filtraZona

然后我有一个ng重复,只有选中复选框
openfilterazone
时,过滤器
filterazona
才应处于活动状态

我不知道只有选中了
openfilterazone
时,在repeater表达式上加什么才能应用过滤器

<tr ng-repeat="cliente in clienti | filter:search | filtraStato:statusFilter | filtraZona:zonaFilter">

您只需像

item in items | filter: box ? search: ''"

我认为唯一的方法是为此编写自定义筛选函数,如下所示:

在控制器/指令中:

var _filter = $filter('filtraZona');
$scope.filterFnc = function(elem) {
  if(!$scope.openFiltraZone) return true; //leave on list when openFiltraZone is not checked
  return _filter([elem], $scope.zonaFilter).length > 0; //this will get filtraZona filter and apply it to one element array (created with [elem] expression) with $scope.zonaFilter parameter. Whole expression will return true only if filtraZona will not filter out elem.
}
鉴于:

<tr ng-repeat="cliente in clienti | filter:search | filtraStato:statusFilter | filter:filterFnc">
并以这种方式使用它(请注意
filtraZona
)的第二个参数:


派对有点晚了,但这对我使用angular 1.x很有效:

| filter:{other filters, active: (active ? true : "")}

这可以,但不完全,我有更多的过滤器,所以我编辑了原始问题,你能再检查一下吗?Tks@pankaj这真的帮助了我。看到我的解决方案了吗
<tr ng-repeat="cliente in clienti | filter:search | filtraStato:statusFilter | filter:filterFnc">
angular.filter('filtraZona', function() {
  return function(arr, param1, checkboxChecked) {
    var arr2 = [];
    angular.forEach(arr, function(elem) {
      if(!checkboxChecked) arr2.push(elem);
      //rest of filtraZona logic goes here
    });
    return arr2;
  };
});
<tr ng-repeat="cliente in clienti | filter:search | filtraStato:statusFilter | filtraZona:zonaFilter:openFiltraZone">
| filter:{other filters, active: (active ? true : "")}