我使用Angular和ng-repeat以及Semantic UI Grid布局。
我试图连续显示5列。达到第五个项目时,创建一个新行。下面为数据中的每个项创建一个新的行和列。我可以看到有一个带有ng-repeat的索引属性但不确定如何基本上说if mod 5 == 0
输出一个新的行元素,否则只输出一个新列。
<div class="ui grid">
<div class="row" ng-repeat="item in data.results">
<div class="column">
<div class="ui segment">
{{item.original_title}}
</div>
</div>
</div>
</div>
感谢您的帮助
答案 0 :(得分:4)
在我看来,最清洁,最易维护的方式是写一个指令。在您的HTML中,您只需:
<grid source="data.results" break="5" />
在您的JS中,您将数据分解为控制器内的正确结构,并使用模板输出:
angular.module('yourApp', [])
.directive('grid', function() {
return {
restrict: 'E',
scope: {
break: '=break',
source: '=source'
},
controller: function($scope) {
var total = Math.ceil($scope.source.length / $scope.break);
$scope.data = new Array(total);
for (var i = 0; i < total; ++i) {
$scope.data[i] = $scope.source.slice(i * $scope.break, (i + 1) * $scope.break);
}
},
template:
'<div class="ui grid">' +
' <div class="row" ng-repeat="row in data">' +
' <div class="column" ng-repeat="item in row">' +
' <div class="ui segment">' +
' {{item.original_title}}' +
' </div>' +
' </div>' +
' </div>' +
'</div>',
replace: true
};
});
答案 1 :(得分:3)
这是一种使用范围过滤器的方法。
我们计算您需要的行数(data.results.length / 5),然后使用范围过滤器ng-repeat
迭代该行数。
然后在每一行中我们slice
输出该行所需的列,并使用另一行ng-repeat
创建这些列。
<div class="row" ng-repeat="n in [] | range:(data.results.length/5)+1">
<span ng-repeat='item in data.results.slice($index*5,($index*5+5))'>
<div class="column">
<div class="ui segment">
{{item.original_title}}
</div>
</div>
</span>
</div>
和相关的范围过滤器(来自:http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#more-about-loops):
app.filter('range', function () {
return function (input, total) {
total = parseInt(total);
for (var i = 0; i < total; i++) {
input.push(i);
}
return input;
};
这是一个小提琴:http://jsfiddle.net/BMrNs/1/
答案 2 :(得分:2)
尝试将ng-switch与Array.slice()
结合使用这不是最有效的方法,但如果您没有办法干预数据表示,那么这是我能想到的最佳方法。
<div class="ui grid">
<div ng-repeat="item in data.results">
<div ng-switch on="$index % 5">
<div ng-switch-when="0" class="row">
<div ng-repeat="e in data.results.slice($index, $index + 5)">
<div class="column">
<div class="ui segment">
{{e.original_title}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>