我有一个现有的HTML模板,可以使用ngRepeat,
在页面上放置切片<div ng-repeat="product in productList">
<div class="product-tile">
Product content goes here...
</div>
</div>
设计师现在需要将每3个瓷砖包裹在一个额外的div中。
通常情况下,我会循环遍历列表,
但我无法看到我在Angular中的表现。有关如何处理此事的任何建议吗?
答案 0 :(得分:10)
&#34; prime&#34; ViewModel因此适合您的View - 它有一个名为 View -Model的原因。因此,您修改后的productList
可以是:
$scope.productList =
[
[ {/* product */ }, { }, { } ],
[ { }, { }, { } ],
// etc...
];
所以,要迭代你会嵌套ng-repeat
s:
<div ng-repeat="row in productList">
<div ng-repeat="product in row" class="product-row-group">
<div class="product-tile">
</div>
</div>
</div>
但是通过数组&#34;伪步&#34; 是可能的(尽管效率低下):
<div ng-repeat="product in productList">
<div ng-if="$index % 3 === 0"
ng-init="group = productList.slice($index, $index + 3)">
<div class="products-row">
<div class="product-tile" ng-repeat="grItem in group">
{{grItem}}
</div>
</div>
</div>
</div>
第一个ng-repeat
遍历整个数组,但内部ng-if
仅渲染每个第3个项目,ng-init
创建一个由3个产品别名为group
的子数组。内部ng-repeat
会覆盖3个产品group
中的项目。
<强> Demo 强>
答案 1 :(得分:3)
我唯一能想到的就是在将原始productList
数组放入数组数组时对其进行一次分区,然后使用嵌套的ng-repeat
来获取所需的结构
以下说明了这种方法:
angular.module('stackoverflow', []).controller('ProductListsCtrl', function($scope) {
$scope.productLists = partition([1, 2, 3, 4, 5, 6, 7, 8], 3);
});
/* You could put this in a utility library or something */
function partition(coll, size) {
var groups = [];
for (var groupIndex = 0, numGroups = Math.ceil(coll.length / size);
groupIndex < numGroups;
groupIndex++) {
var startIndex = groupIndex * size;
groups.push(coll.slice(startIndex, startIndex + size));
}
return groups;
}
.product-tile {
display: inline-block;
background-color: #9A9EDA;
height: 100px;
width: 100px;
line-height: 100px;
vertical-align: middle;
text-align: center;
margin-right: 10px;
}
.wrapper {
margin: 5px;
padding: 10px;
background-color: #634AFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="stackoverflow" ng-controller="ProductListsCtrl">
<div ng-repeat="productList in productLists" class="wrapper">
<div class="product-tile" ng-repeat="product in productList">
{{product}}
</div>
</div>
</div>