2015-12-20 77 views
3

我对许多过滤器都有ng-repeat。AngularJS,只有在变量为真的情况下才会过滤

(1)从一个输入字段:

<input type="text" ng-model="search"> 

(2)从按钮的列表另一个之一:连接到命名的自定义过滤器

<ul id="element_filter" class="uk-subnav uk-subnav-pill uk-margin-remove"> 
    <li ng-class="statusFilter == '' ? 'uk-active' : ''"><a ng-click="statusFilter = ''">Tutti</a></li> 
    <li ng-class="statusFilter == '1' ? 'uk-active' : ''"><a ng-click="statusFilter = '1'">Nuovo</a></li> 
</ul> 

filtraStato

(3 )比我有一个复选框:

<div class="uk-width-medium-1-6"> 
    <input type="checkbox" name="checkbox_demo_inline" id="checkbox_mostra_zone" ng-model="openFiltraZone" data-md-icheck /> 
    <label for="checkbox_mostra_zone" class="inline-label">Filtra Zone</label> 
</div> 

这也被连接到自定义过滤器filtraZona

然后我有一个NG-重复其中滤波器filtraZona应该仅当该复选框openFiltraZone检查活性。

我不知道穿上中继表达什么,以应用过滤器只有openFiltraZone检查

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

回答

1

我认为唯一的办法就是编写自定义过滤功能,就像这样:

在控制器/指令:

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过滤器。请注意,这不是最具cpu效率的方式。

如果你可以改变filtraZona实现,你可以添加简单的预检查,以它的代码:

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

而且使用这种方式(请注意第二个参数filtraZona):

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

第二个是好的。 TKS –

3

你可以简单地把它像

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

Demo Plunkr

+0

这工程确定b不完全,我有更多的过滤器,所以我编辑了原始问题,你能再次检查吗? Tks –

2

一晚会晚了,但这对角我1.x的作品:

| filter:{other filters, active: (active ? true : "")} 
相关问题