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
函数。 这里也是笨蛋 。