如何将ng-repeat分割成批
How to split ng-repeat into batches
我在http://getbootstrap.com/javascript/#buttons-examples做这个ref:复选框的例子
<div class="btn-group list-group-item-text" data-toggle="buttons">
<label data-ng-repeat="type in types"
ng-class="{btn: true, 'btn-primary': true, active: Map[type.id]}">
<input type="checkbox" ng-model="Map[type.id]">{{type.name}}
</label>
</div>
现在的问题是这个类型数组有时少于5项有时多于5项。当按钮组有超过5个项目时,它会以一种难看的方式分裂到下一行。
我该怎么做呢
ng-repeat on 0-4 of array - create a button group for these 5 items
ng-repeat on 5-9 of array (if array length is >5) ...
ng-repeat on 10-14 of array (if array length is >10) ...
...
注意:更好的方法是查看使用了多少字符。每种类型都有不同的名称,有些长一些短,所以有时候一个非常长的名称会占用面板的所有宽度。
对于ng-repeat
使用两个limitTo
滤波器,正极&负值。
这里有一个演示http://plnkr.co/edit/8LXXnH?p=preview
更新的例子:
<li ng-repeat="item in items | limitTo: 5 | limitTo: -5">{{item}}</li>
<li ng-repeat="item in items | limitTo: 10 | limitTo: -5">{{item}}</li>
第一个ng-repeat将返回数组的0到4,第二个ng-repeat将返回5到9。
你可以预先对它们进行分组,然后使用嵌套的重复器。
var groups = [],
maxGroupSize = 4,
groupNum = 0;
groups.push([]);
groupNum = 0;
for (var i = 0; i < types.length; i++) {
groups[groupNum].push(types[i]);
if (groups[groupNum].length === maxGroupSize) {
groups.push([]);
groupNum++;
}
}
$scope.groups = groups;
那么你可以使用嵌套的重复器,像这样:
<div data-ng-repeat="group in groups"
class="btn-group list-group-item-text" data-toggle="buttons">
<label data-ng-repeat="type in group"
ng-class="{btn: true, 'btn-primary': true, active: Map[type.id]}">
<input type="checkbox" ng-model="Map[type.id]">{{type.name}}
</label>
</div>
下面是jsFiddle演示的一个例子:http://jsfiddle.net/jwcarroll/V8fuy/
更新:
我已经创建了一个更新版本的相同的把戏,以显示使用一个小的CSS截断文本与省略号。通过添加title
属性,您可以获得默认的工具提示功能,但最好使用Bootstrap工具提示插件。
你可能需要创建一个指令,或者使用Angular Bootstrap之类的东西。
我还没有测试过,但我猜你可以用splice硬编码限制:
<div data-ng-repeat="group1Item in items.splice(limit1,limit2-limit1)"> ... </div>
<div data-ng-repeat="group2Item in items.splice(limit2,limit3-limit2)"> ... </div>
<div data-ng-repeat="group3Item in items.splice(limit3,limit4-limit3)"> ... </div>
这对于相对较小的数组来说是可以的,但是我认为对于较大的数组来说,预分组是一种方法。
如果您不介意使用库,这正是lodash#chunk所做的。在控制器中进行分块处理,然后在视图中编写嵌套的for循环。
创建一个数组,其中的元素被分成长度为size的组。如果集合不能均匀分割,则最后的块将是剩余的元素。
_.chunk(['a', 'b', 'c', 'd'], 2);
// → [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// → [['a', 'b', 'c'], ['d']]
- ng init中的表达式无法使用ng repeat
- Angular ng repeat order将多个字段作为一个字段
- 访问ng repeat中的第一个项目
- Angular js+ng repeat+字母数字索引不起作用
- 如何正确应用Angularjs ng repeat
- AngularJS Navigation (li ng-repeat, create header li), DOM
- 如何使用ng repeat中的选定输入更新我的对象
- 无法使用ng repeat检索动态创建的JSON对象的属性
- 使用 ng-repeat访问 ng 表单元素/值
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 如何在ng repeat angular js中使用$index
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- ng repeat在ng repeat-过滤器不工作
- 在ng repeat中使用带有orderBy的方法
- Angular JS ng-repeat
- 在ng repeat中使ng disabled为true
- AngularJS:如何在ng repeat中使用$index
- 复选框无法正常使用ng repeat,AngularJs
- 如何避免在HTML中使用ng repeat对url名称进行硬编码
- 如何将ng-repeat分割成批