pvo*_*gel 11 javascript twitter-bootstrap angularjs angularjs-ng-repeat
我有一个情况,我有一个数据列表要在各个面板中显示,使用Bootstrap的网格系统,我想利用宽屏幕并水平显示几个面板,但在狭窄的屏幕上有它们堆叠.我目前正在服务器端放置这样的ejs,将列作为查询参数传入,通常设置为2或3,因此每个colClass都是col-sm-6或col-sm-4.
<% var colWidth = 12/columns; var colClass = "col-sm-" + colWidth; %>
<% for(var i=0; i<contestData.classData.length; i++) {%>
<% if ((classCount % columns) == 0) { %>
<div class="row">
<% } %>
<div class="<%= colClass %>">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"> <%= contestData.classData[i].name %> </h3>
</div>
<div>...</div>
</div>
</div>
<% classCount++ %>
<% if ((classCount % columns) == 0) { %>
</div>
<% } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)
这样做有效,但是在服务器端进行这种级别的布局会让我感到冒犯,我真的宁愿用Angular来做这件事,但是我无法弄清楚如何在div中使用class = row包装适当数量的面板-repeat甚至ng-repeat-start ="matchData.classData中的classData"
谢谢!
Osw*_*rez 55
这里有一个简单的解决方案,只有HTML,3 ROWS
<div class="row" >
<div class="col-md-4" ng-repeat-start="item in data">
I'M A ROW
</div>
<div class="clearfix" ng-if="($index+1)%3==0"></div>
<div ng-repeat-end=""></div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果您首先根据列数将数据分成更小的部分,那么使用嵌套ng-repeat来创建布局将很容易:
$scope.getRows = function(array, columns) {
var rows = [];
///sf/ask/594698121/
var i,j,temparray, chunk = columns;
for (i=0,j=array.length; i<j; i+=chunk) {
temparray = array.slice(i, i+chunk);
rows.push(temparray);
}
return rows;
};
$scope.rows = $scope.getRows($scope.contestData, $scope.columns);
Run Code Online (Sandbox Code Playgroud)
那么你的标记很简单:
<div ng-repeat="row in rows">
<div class="row">
<div ng-class="{'col-xs-4': columns == 3, 'col-xs-3': columns == 4}" ng-repeat="contest in row">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">{{contest}}</div>
</div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
请注意,它ng-class正在根据列数决定添加哪种类型的类。此示例处理 3 和 4,但您可以扩展它以处理其他情况。
这是一个工作演示:http://plnkr.co/edit/B3VAXlq9dkzO3hQkbkN3 ?p=preview
更新:
Plunker 的全屏模式似乎干扰了列宽样式,因此我将链接更改为以预览模式显示。