产品有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"
}
];
答案 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"'>