AngularJS of-repeat 分组二维
AngularJS ng-repeat grouped 2 dimensional
我想做的是使用 ng-repeat
指令在 angularjs
中迭代某种二维
我有一个长列表,我想在 html table 中显示,假设每行 4 个。
我目前正在使用某种解决方法来做到这一点:
<table>
<tr>
<td data-ng-repeat="x in my.list.slice(0, 4)">
{{x}}
</td>
</tr>
<tr>
<td data-ng-repeat="x in my.list.slice(4, 8)">
{{x}}
</td>
</tr>
<tr>
<td data-ng-repeat="x in my.list.slice(8, 12)">
{{x}}
</td>
</tr>
<tr>
<!-- -->
</tr>
</table>
我想知道 <tr>
上是否有某种干扰,但每次都有 4 * <td>
?
我为您提供了一个解决方案,可能有更好的解决方案,但这会很好用。
首先你从你的数组中创建二维数组(即使用 reduce),然后在 tr 和 td 上用 ng-repeat 显示它:
JS - 我使用了简单的 1,2,3,4,5,6,...等。数组:
let mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
$scope.mylist = mylist.reduce((prevVal, currVal, index) => {
if (!prevVal[Math.floor(index / 4)]) {
prevVal[Math.floor(index / 4)] = [];
}
prevVal[Math.floor(index / 4)].push(currVal);
return prevVal;
}, []);
它可能看起来不太好,但它确实很好,并且会创建前四个元素的数组,如 [[1,2,3,4], [5,6,7,8]] 基本上是分组元素.
之后你只需要像这里一样遍历整个列表:
<table>
<tr ng-repeat="x in mylist">
<td ng-repeat="num in x">
{{num}}
</td>
</tr>
</table>
并且你会在一个 table 行中得到每四个元素的 table。
哦,忘了我的fiddle:https://jsfiddle.net/pegla/b0pckLgh/
希望对您有所帮助,干杯。
因此对于 'tr',您希望它生成数组长度的四分之一,因为每个数组中将有 4 个 'td'。然后只需使用索引即可计算 td 所需的数组中的点。
<table>
<tr data-ng-repeat="x in my.list.slice(0, my.list.length/4) track by $index">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
</table>
编辑:以上仅适用于可被 4 整除的数组,如果您需要能够容纳可能半满行的内容,则以下内容应该有效。
<table>
<tr data-ng-repeat="x in my.list.slice(0, (my.list.length/4)+1) track by $index" ng-if="myArr%4 !== 0">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
<tr data-ng-repeat="x in my.list.slice(0, my.list.length/4) track by $index" ng-if="myArr%4 === 0">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
</table>
我想做的是使用 ng-repeat
指令在 angularjs
我有一个长列表,我想在 html table 中显示,假设每行 4 个。
我目前正在使用某种解决方法来做到这一点:
<table>
<tr>
<td data-ng-repeat="x in my.list.slice(0, 4)">
{{x}}
</td>
</tr>
<tr>
<td data-ng-repeat="x in my.list.slice(4, 8)">
{{x}}
</td>
</tr>
<tr>
<td data-ng-repeat="x in my.list.slice(8, 12)">
{{x}}
</td>
</tr>
<tr>
<!-- -->
</tr>
</table>
我想知道 <tr>
上是否有某种干扰,但每次都有 4 * <td>
?
我为您提供了一个解决方案,可能有更好的解决方案,但这会很好用。
首先你从你的数组中创建二维数组(即使用 reduce),然后在 tr 和 td 上用 ng-repeat 显示它:
JS - 我使用了简单的 1,2,3,4,5,6,...等。数组:
let mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
$scope.mylist = mylist.reduce((prevVal, currVal, index) => {
if (!prevVal[Math.floor(index / 4)]) {
prevVal[Math.floor(index / 4)] = [];
}
prevVal[Math.floor(index / 4)].push(currVal);
return prevVal;
}, []);
它可能看起来不太好,但它确实很好,并且会创建前四个元素的数组,如 [[1,2,3,4], [5,6,7,8]] 基本上是分组元素.
之后你只需要像这里一样遍历整个列表:
<table>
<tr ng-repeat="x in mylist">
<td ng-repeat="num in x">
{{num}}
</td>
</tr>
</table>
并且你会在一个 table 行中得到每四个元素的 table。
哦,忘了我的fiddle:https://jsfiddle.net/pegla/b0pckLgh/
希望对您有所帮助,干杯。
因此对于 'tr',您希望它生成数组长度的四分之一,因为每个数组中将有 4 个 'td'。然后只需使用索引即可计算 td 所需的数组中的点。
<table>
<tr data-ng-repeat="x in my.list.slice(0, my.list.length/4) track by $index">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
</table>
编辑:以上仅适用于可被 4 整除的数组,如果您需要能够容纳可能半满行的内容,则以下内容应该有效。
<table>
<tr data-ng-repeat="x in my.list.slice(0, (my.list.length/4)+1) track by $index" ng-if="myArr%4 !== 0">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
<tr data-ng-repeat="x in my.list.slice(0, my.list.length/4) track by $index" ng-if="myArr%4 === 0">
<td data-ng-repeat="x in my.list.slice($index*4, $index*4+4)">
{{x}}
</td>
</tr>
</table>