我需要创建一个分组表,类似于:
Customer Site
------------------------------
Customer 1 Site 1.1
Site 1.2
Site 1.3
Customer 2 Site 2.1
Site 2.2
要在HTML中执行此操作,我需要将两个ng-repeats附加到单个tr元素:
<tr ng-repeat="customer in customers" ng-repeat="site in customer.sites">
<td> {{ customer.name }}</td>
<td> {{ site.name }}</td>
</tr>
这种确切的语法不起作用。不允许在Tbody内部使用Div和Span标签。我宁愿不预先格式化数据 在控制器中。我只需要一种方法来使用两个ng-repeats和一个TR标签。有可能吗?
答案 0 :(得分:2)
使用表格模型和单个ng-repeat。
获取customers
列表并将其转换为代表表格行的内容:
get customerAndSiteNames () {
// naive approach. maybe use List.expand
var result = [];
customers.foreach((customer) {
result.add({
'customer': customer.name
'site' : customer.sites[0].name
});
customer.sites.sublist(1).forEach((site){
result.add({
'site' : site.name
}
}
return result;
}
<tr ng-repeat="customerSite in customerAndSiteNames">
<td> {{ customerSite.customer }}</td>
<td> {{ customerSite.site }}</td>
</tr>
答案 1 :(得分:1)
到目前为止,我找到了一个解决方案。显然可以重复使用tbody标签。
所以我可以这样做:
<tbody ng-repeat="customer in customers">
<tr ng-repeat="site in customer.sites">
<td> {{ customer.name }}</td>
<td> {{ site.name }}</td>
</tr>
</tbody>
然而,最初的问题仍然存在。
答案 2 :(得分:0)
您可以使用rowspan
:
<table>
<tbody ng-repeat="customer in customers">
<tr ng-repeat="site in customer.sites">
<td rowspan="{{customer.sites.length}}" ng-if="$index==0">{{customer.name}}</td>
<td>{{site.name}}</td>
</tr>
</tbody>
</table>
ng-if
部分表示仅为第一行添加tr
DOM。看起来它可以改进,但它至少可以完成工作。
答案 3 :(得分:0)
您可以尝试使用ng-repeat-start来完成此任务:
<tr ng-repeat-start="customer in customers">
<tr ng-repeat-end ng-repeat="site in customer.sites">
<td> {{ customer.name }}</td>
<td> {{ site.name }}</td>
</tr>
</tr>