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

Yog*_*gaj 56 javascript angularjs angularjs-ng-repeat angularjs-filter

是否可以过滤对象数组,以便属性值可以是几个值(OR条件),而无需编写自定义过滤器

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

而不是

<div ng-repeat="product in products | filter: { color: 'red' }">
Run Code Online (Sandbox Code Playgroud)

有可能做这样的事情

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

如下样本数据─

$scope.products = [
   { id: 1, name: 'test', color: 'red' },
   { id: 2, name: 'bob', color: 'blue' }
   /*... etc... */
];
Run Code Online (Sandbox Code Playgroud)

我没试过

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

She*_*ock 92

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

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

$scope.myFilter = function (item) { 
    return item === 'red' || item === 'blue'; 
};
Run Code Online (Sandbox Code Playgroud)

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

  • 除了函数或自定义过滤器之外没有办法内联吗?ngHide将`display`设置为`none`,但`div`将生成并插入DOM.无论如何,我认为函数是最干净的方法,只是有一种语法可以指定内联的OR条件. (5认同)

小智 30

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

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

  • 这不会更像是一个“和”条件吗? (2认同)

jbr*_*k10 14

我的"ng-if"应该有效:

<div ng-repeat="product in products" ng-if="product.color === 'red' 
|| product.color === 'blue'">
Run Code Online (Sandbox Code Playgroud)


小智 9

在HTML中:

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

在Angular中:

$scope.colorFilter = function (item) { 
  if (item.color === 'red' || item.color === 'blue') {
  return item;
 }
};
Run Code Online (Sandbox Code Playgroud)


aer*_*ero 7

这是一种在传递额外参数时执行此操作的方法:

/sf/answers/1246965821/(感谢Denis Pshenov)

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

随后端:

$scope.weDontLike = function(name) {
    return function(friend) {
        return friend.name != name;
    }
}
Run Code Online (Sandbox Code Playgroud)

.


而另一种方法是仅使用模板内过滤器:

/sf/answers/876966541/(感谢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>
Run Code Online (Sandbox Code Playgroud)