如何让 ng-repeat 中的元素只重复一次?
How do I make an element inside ng-repeat to repeat just once?
您好,我遇到了一种情况,我必须创建一个 table,这样对于每个元集,我都必须在 table 中显示集合行。理想情况下,Metaset 应该有一个行跨度,并且其中的行必须跨度。像这样的东西
元数据集 1 SetAttr1 Setattr2
设置属性 2 SetAttr2
元数据集 2 SetAttr1 Setattr2
设置属性 2 SetAttr2
我使用了以下结构:
<tbody ng-repeat="(metaset, ids) in metasetHashMapTree">
<tr>
<td rowspan = "{{(ids.length*2) + 1}}"><span style="font-weight:bold">{{metaset}}</span></td>
</tr>
<tr ng-repeat="item in ids" >
<td width="10%" align="{{item.treeLevelStyle['align']}}" bgcolor="{{item.treeLevelStyle['color']}}"> <span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyId}}</span></td>
<td width="2%" class="{{item['A-S0-a']}}"></td>
<td width="2%" class="{{item['A-S0-b']}}"></td>
<td width="2%" class="{{item['A-S0-c']}}"></td>
<td width="2%" class="{{item['A-S0-d']}}"></td>
<td width="2%" class="{{item['A-S0-e']}}"></td>
<td width="2%" class="{{item['A-S0-f']}}"></td>
<td width="2%" class="{{item['A-S0-g']}}"></td>
<td width="2%" class="{{item['A-S1-a']}}"></td>
<td width="2%" class="{{item['A-S1-b']}}"></td>
<td width="2%" class="{{item['A-S2-a']}}"></td>
<td width="2%" class="{{item['A-S3-a']}}"></td>
<td width="2%" class="{{item['A-S4-a']}}"></td>
<td width="2%" class="{{item['A-S5-a']}}"></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyTenant}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyRelease}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyComponentAffected}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyStatus}}</span></td>
<td font-weight : "{{item.treeLevelStyle['font-weight']}}" bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.Match}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.SellDropFix}}</span></td>
</tr>
</tbody>
我现在有一个要求,只有元集中的第一行必须首先显示,而其余的只有在单击该元集中的按钮后才显示。
如何修改此结构以满足该要求。我试过将所有内容都放在一行中并禁止在第二行中显示元集,如下所示,但是行线显示为行跨度现在丢失了..
<tbody ng-repeat="(metaset, ids) in metasetHashMapTree">
<!-- <tr>
<td rowspan = "{{(ids.length*2) + 1}}"><span style="font-weight:bold">{{metaset}}</span></td>
</tr> -->
<tr ng-repeat="item in ids" >
<td> <span style="font-weight:bold">{{metaset}}</span></td>
<td width="10%" align="{{item.treeLevelStyle['align']}}" bgcolor="{{item.treeLevelStyle['color']}}"> <span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyId}}</span></td>
<td width="2%" class="{{item['A-S0-a']}}"></td>
<td width="2%" class="{{item['A-S0-b']}}"></td>
<td width="2%" class="{{item['A-S0-c']}}"></td>
<td width="2%" class="{{item['A-S0-d']}}"></td>
<td width="2%" class="{{item['A-S0-e']}}"></td>
<td width="2%" class="{{item['A-S0-f']}}"></td>
<td width="2%" class="{{item['A-S0-g']}}"></td>
<td width="2%" class="{{item['A-S1-a']}}"></td>
<td width="2%" class="{{item['A-S1-b']}}"></td>
<td width="2%" class="{{item['A-S2-a']}}"></td>
<td width="2%" class="{{item['A-S3-a']}}"></td>
<td width="2%" class="{{item['A-S4-a']}}"></td>
<td width="2%" class="{{item['A-S5-a']}}"></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyTenant}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyRelease}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyComponentAffected}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyStatus}}</span></td>
<td font-weight : "{{item.treeLevelStyle['font-weight']}}" bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.Match}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.SellDropFix}}</span></td>
</tr>
</tbody>`
请帮忙。
按照 documentation 中的建议,您应该使用 LimitTo 过滤器。
<tr ng-repeat="item in ids | limitTo:2" >
限制量可以在控制器中指定或直接插入过滤器。
如果你想要 hide/show 个元素,你可以使用 ngHide 或 ngShow 指令。
检查此 out 以获取 ngShow
为 ngHide
检查此 out
用法比较简单,例子来自文档:
<!-- when $scope.myValue is truthy (element is hidden) -->
<div ng-hide="myValue" class="ng-hide"></div>
<!-- when $scope.myValue is falsy (element is visible) -->
<div ng-hide="myValue"></div>
同样适用于 ngShow,只是当 myValue 为真时,它会显示。
可以根据详细信息行是否可见来计算行跨度。
将使用变量 isVisible
,可以在每个 <tbody>
重复中切换,因为 ng-repeat
为每个重复元素创建一个子范围。
因此当行不可见时,表达式会将 rowspan
设置为 1
,并在
时使用您的计算
<tr>
<!-- rowspan will be "1" if not visible, or calculated if they are -->
<td rowspan = "{{isVisible ? (ids.length*2) + 1 : 1}}">
<span >{{metaset}}</span>
<button ng-click="isvisible = !isVisible">Toggle Details</button>
</td>
</tr>
然后使用 ng-if
切换 dom
中的行
<tr ng-repeat="item in ids" ng-if="isVisible">
<td></td>
<td></td>
........
</tr>
ng-if
支持 ngAnimate
css 动画,因此使用一些 css 规则可以使其表现得像一个流畅的手风琴
您好,我遇到了一种情况,我必须创建一个 table,这样对于每个元集,我都必须在 table 中显示集合行。理想情况下,Metaset 应该有一个行跨度,并且其中的行必须跨度。像这样的东西 元数据集 1 SetAttr1 Setattr2 设置属性 2 SetAttr2 元数据集 2 SetAttr1 Setattr2 设置属性 2 SetAttr2 我使用了以下结构:
<tbody ng-repeat="(metaset, ids) in metasetHashMapTree">
<tr>
<td rowspan = "{{(ids.length*2) + 1}}"><span style="font-weight:bold">{{metaset}}</span></td>
</tr>
<tr ng-repeat="item in ids" >
<td width="10%" align="{{item.treeLevelStyle['align']}}" bgcolor="{{item.treeLevelStyle['color']}}"> <span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyId}}</span></td>
<td width="2%" class="{{item['A-S0-a']}}"></td>
<td width="2%" class="{{item['A-S0-b']}}"></td>
<td width="2%" class="{{item['A-S0-c']}}"></td>
<td width="2%" class="{{item['A-S0-d']}}"></td>
<td width="2%" class="{{item['A-S0-e']}}"></td>
<td width="2%" class="{{item['A-S0-f']}}"></td>
<td width="2%" class="{{item['A-S0-g']}}"></td>
<td width="2%" class="{{item['A-S1-a']}}"></td>
<td width="2%" class="{{item['A-S1-b']}}"></td>
<td width="2%" class="{{item['A-S2-a']}}"></td>
<td width="2%" class="{{item['A-S3-a']}}"></td>
<td width="2%" class="{{item['A-S4-a']}}"></td>
<td width="2%" class="{{item['A-S5-a']}}"></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyTenant}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyRelease}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyComponentAffected}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyStatus}}</span></td>
<td font-weight : "{{item.treeLevelStyle['font-weight']}}" bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.Match}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.SellDropFix}}</span></td>
</tr>
</tbody>
我现在有一个要求,只有元集中的第一行必须首先显示,而其余的只有在单击该元集中的按钮后才显示。
如何修改此结构以满足该要求。我试过将所有内容都放在一行中并禁止在第二行中显示元集,如下所示,但是行线显示为行跨度现在丢失了..
<tbody ng-repeat="(metaset, ids) in metasetHashMapTree">
<!-- <tr>
<td rowspan = "{{(ids.length*2) + 1}}"><span style="font-weight:bold">{{metaset}}</span></td>
</tr> -->
<tr ng-repeat="item in ids" >
<td> <span style="font-weight:bold">{{metaset}}</span></td>
<td width="10%" align="{{item.treeLevelStyle['align']}}" bgcolor="{{item.treeLevelStyle['color']}}"> <span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyId}}</span></td>
<td width="2%" class="{{item['A-S0-a']}}"></td>
<td width="2%" class="{{item['A-S0-b']}}"></td>
<td width="2%" class="{{item['A-S0-c']}}"></td>
<td width="2%" class="{{item['A-S0-d']}}"></td>
<td width="2%" class="{{item['A-S0-e']}}"></td>
<td width="2%" class="{{item['A-S0-f']}}"></td>
<td width="2%" class="{{item['A-S0-g']}}"></td>
<td width="2%" class="{{item['A-S1-a']}}"></td>
<td width="2%" class="{{item['A-S1-b']}}"></td>
<td width="2%" class="{{item['A-S2-a']}}"></td>
<td width="2%" class="{{item['A-S3-a']}}"></td>
<td width="2%" class="{{item['A-S4-a']}}"></td>
<td width="2%" class="{{item['A-S5-a']}}"></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyTenant}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyRelease}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyComponentAffected}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.BuyStatus}}</span></td>
<td font-weight : "{{item.treeLevelStyle['font-weight']}}" bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.Match}}</span></td>
<td bgcolor="{{item.treeLevelStyle['color']}}"><span style="font-weight:{{item.treeLevelStyle['font-weight']}}">{{item.SellDropFix}}</span></td>
</tr>
</tbody>`
请帮忙。
按照 documentation 中的建议,您应该使用 LimitTo 过滤器。
<tr ng-repeat="item in ids | limitTo:2" >
限制量可以在控制器中指定或直接插入过滤器。
如果你想要 hide/show 个元素,你可以使用 ngHide 或 ngShow 指令。
检查此 out 以获取 ngShow
为 ngHide
检查此 out用法比较简单,例子来自文档:
<!-- when $scope.myValue is truthy (element is hidden) -->
<div ng-hide="myValue" class="ng-hide"></div>
<!-- when $scope.myValue is falsy (element is visible) -->
<div ng-hide="myValue"></div>
同样适用于 ngShow,只是当 myValue 为真时,它会显示。
可以根据详细信息行是否可见来计算行跨度。
将使用变量 isVisible
,可以在每个 <tbody>
重复中切换,因为 ng-repeat
为每个重复元素创建一个子范围。
因此当行不可见时,表达式会将 rowspan
设置为 1
,并在
<tr>
<!-- rowspan will be "1" if not visible, or calculated if they are -->
<td rowspan = "{{isVisible ? (ids.length*2) + 1 : 1}}">
<span >{{metaset}}</span>
<button ng-click="isvisible = !isVisible">Toggle Details</button>
</td>
</tr>
然后使用 ng-if
切换 dom
<tr ng-repeat="item in ids" ng-if="isVisible">
<td></td>
<td></td>
........
</tr>
ng-if
支持 ngAnimate
css 动画,因此使用一些 css 规则可以使其表现得像一个流畅的手风琴