Angular.js ng-repeat过滤属性具有多个值之一(值的OR)

是否有可能过滤一个对象数组,使得属性的值可以是几个值(OR条件)中的任何一个,而无需编写自定义filter

这与这个问题类似 – Angular.js ng-repeat:单个字段过滤

但是,而不是

<div ng-repeat="product in products | filter: { color: 'red' }"> 

是否有可能做这样的事情

 <div ng-repeat="product in products | filter: { color: 'red'||'blue' }"> 

以下是一个样本数据 –

 $scope.products = [ { id: 1, name: 'test', color: 'red' }, { id: 2, name: 'bob', color: 'blue' } /*... etc... */ ]; 

我没有成功尝试

 <div ng-repeat="product in products | filter: { color: ('red'||'blue') }"> 

最好的方法是使用一个函数:

 <div ng-repeat="product in products | filter: myFilter"> $scope.myFilter = function (item) { return item === 'red' || item === 'blue'; }; 

或者,您可以使用ngHide或ngShow根据特定条件dynamic显示和隐藏元素。

对我来说,它的工作原理如下

 <div ng-repeat="product in products | filter: { color: 'red'} | filter: { color:'blue' }"> 

在HTML中:

<div ng-repeat="product in products | filter: colorFilter">

在Angular中:

 $scope.colorFilter = function (item) { if (item.color === 'red' || item.color === 'blue') { return item; } }; 

我的事情“ng-if”应该工作:

 <div ng-repeat="product in products" ng-if="product.color === 'red' || product.color === 'blue'"> 

在传递一个额外的参数时,这是一种方法:

https://stackoverflow.com/a/17813797/4533488 (感谢丹尼斯Pshenov)

 <div ng-repeat="group in groups"> <li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)"> <span>{{friend.name}}</span> <li> </div> 

与后端:

 $scope.weDontLike = function(name) { return function(friend) { return friend.name != name; } } 


而另一种只有模板内filter的方式:

https://stackoverflow.com/a/12528093/4533488 (感谢mikel)

 <div ng:app> <div ng-controller="HelloCntl"> <ul> <li ng-repeat="friend in friends | filter:{name:'!Adam'}"> <span>{{friend.name}}</span> <span>{{friend.phone}}</span> </li> </ul> </div> 

我发现了一个更通用的解决scheme,我能想到的是最有angular度的原生解决scheme。 基本上你可以将你自己的比较器传递给默认的filterFilter函数。 这里也是笨蛋 。