角度ng-重复条件

时间:2015-10-02 12:21:12

标签: javascript angularjs angularjs-ng-repeat

产品有4种不同的类别。我想把它们分为3部分。如何用angularjs做到这一点?我想根据产品类别重复ng-repeat。

请检查我的plnkr:http://plnkr.co/edit/XdB2tv03RvYLrUsXFRbw?p=preview

var product = [

  {
    "name": "Item 1",
    "dimension": {
      "height": "4 in",
      "width": "3 in"
    },
    "category": "A"
  }, {
    "name": "Item 2",
    "dimension": {
      "height": "2 in",
      "width": "6 in"
    },
    "category": "B"
  }, {
    "name": "Item 3",
    "dimension": {
      "height": "2 in",
      "width": "3 in"
    },
    "category": "C"
  }, {
    "name": "Item 4",
    "dimension": {
      "height": "5 in",
      "width": "2 in"
    },
    "category": "D"
  }

];

4 个答案:

答案 0 :(得分:5)

您可以使用过滤器:

ng-repeat="item in output.products | filter:{ category: 'A'}"

编辑:看起来每个人用Google搜索相同的thig并找到相同的其他StackOverflow回答^^ @OP你应该学习如何谷歌,顺便说一句!

编辑2 :重新阅读问题,您需要自定义过滤器:

app.filter('category', function() {
  return function(items, categories) {
    if (!items || items.length === 0) {
      return [];
    }

    return items.filter(function(item) {
      return categories.indexOf(item.category) > -1;
    });
  };
});

使用如下:

ng-repeat="item in output.products | category:['A', 'B']"

编辑3 :请注意,就大型阵列的性能而言,这可能相当昂贵。如果你正在处理这样的数组,我建议将数据预过滤成几个子数组。

答案 1 :(得分:2)

您可以使用angular.filter模块。

您必须在控制器中定义自己的地图功能:

$scope.group = function(elem){
    if(elem.category == 'C' || elem.category=='D'){
       elem.category = 'C OR D' ;
       return elem;
    }
    else return elem;
}

然后在html中

<ul ng-repeat="(key, value) in products | map: group | groupBy: 'category'">
  Group name: {{ key }}
  <li ng-repeat="product in value">
     player: {{ product.name }} 
  </li>
</ul>

请注意,如果您使用的是C或D,则会丢失元素类别的信息,如果您使用LoremIpsum的答案,则不会发生这种情况,但使用此解决方案,您将能够创建所需的任何组。 这是一个js fiddle的例子。

答案 2 :(得分:1)

例如Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1);只能重复使用类别A的项目。您还可以使用自定义函数或其他条件进行过滤。

答案 3 :(得分:1)

您可以使用ng.if来实现此目的。

点击此处http://plnkr.co/edit/SKfUKTtKhUnZqec3ABSt?p=preview

  <div class="" ng-repeat="item in output.products" ng-if='item.category =="A"'>