在 AngularJS 中,利用 ng-repeat 是处理重复数据的基础。然而,经常需要将这些元素组织成具有视觉吸引力的布局,例如三个不同的列。为了实现这一目标,我们深入研究了各种方法,包括控制器级和视图级解决方案。
控制器级转换
稳健的方法在于将控制器内的数据。通过利用提供的 chunk 函数,我们可以将数据划分为相等的子数组,每个子数组代表一列:
<code class="javascript">function chunk(arr, size) { var newArr = []; for (var i=0; i<arr.length; i+=size) { newArr.push(arr.slice(i, i+size)); } return newArr; } $scope.chunkedData = chunk(myData, 3);
然后可以使用嵌套的 ng-repeat 渲染该数据,如下所示:
<code class="html"><div class="row" ng-repeat="rows in chunkedData"> <div class="span4" ng-repeat="item in rows">{{item}}</div> </div></code>
视图级别过滤
或者,可以使用过滤器在视图中实现所需的布局。但是,这种方法主要用于显示目的,在合并输入元素时可能会遇到问题:
<code class="html"><pre class="brush:php;toolbar:false"><div ng-repeat="row in ['a','b','c','d','e','f'] | chunk:3"> <div class="column" ng-repeat="item in row"> {{($parent.$index*row.length)+$index+1}}. {{item}} </div> </div>
垂直列化
要垂直而不是水平分布项目,可以对上述方法稍作修改:
<code class="html"><div ng-repeat="row in columns"> <div class="column" ng-repeat="item in row"> {{item}} </div> </div></code>
<code class="javascript">var data = ['a','b','c','d','e','f','g']; $scope.columns = columnize(data, 3); function columnize(input, cols) { var arr = []; for(i = 0; i < input.length; i++) { var colIdx = i % cols; arr[colIdx] = arr[colIdx] || []; arr[colIdx].push(input[i]); } return arr; }
CSS 列
另一个优雅的解决方案涉及利用 CSS 列:
<code class="css">.columns { columns: 3; }
<code class="html"><div class="columns"> <div ng-repeat="item in ['a','b','c','d','e','f','g']"> {{item}} </div> </div></code>
以上是如何在 AngularJS 中使用 Bootstrap 将 ng-repeat 数据分配到列中?的详细内容。更多信息请关注PHP中文网其他相关文章!