我已经做了一些研究,我似乎无法找到最佳模式,以递归方式使用ng-repeat
来创建深table
。用户mgdelmonte对该主题有一些值得注意的提及here,但唉,没有解决方案。
HTML和模板:
<body ng-app="myApp">
<div ng-controller="myAppController">
<script type="text/ng-template" id="tree_item.html">
<tr style="width:100%">
<td>{{data.name}}</td>
</tr>
<div ng-repeat="data in data.nodes" ng-include="'tree_item.html'">
</div>
</script>
<table class="table table-striped">
<thead>
<tr>
<th style="width:30px;">Test</th>
</tr>
</thead>
<tbody ng-repeat="data in treeData" ng-include="'tree_item.html'">
</tbody>
</table>
</div>
</body>
JS:
angular.module('myApp', []);
function myAppController($scope) {
$scope.treeData = [{
"name": "Root",
"nodes": [{
"name": "Level 1",
"nodes": [{
"name": "Level 2"
}]
}]
}];
}
这是我的jsfiddle:http://jsfiddle.net/8f3rL/86/
这是我得到的绝对最远的。它可以很好地遍历树,但是当它递归时我丢失了<tr>
个标签。相反,它正在渲染<span>
s。
我的直觉告诉我,当ng-repeat
在<div>
上运行时,它会为那些tr
和td
创建一个单独的范围,我猜是非法的(因为它们必须绑定到table
元素)。
将div
更改为table
或tbody
或tr
也是无操作的(不是我甚至想要像这样嵌套表格)。
答案 0 :(得分:6)
浏览器不喜欢行之间的多个tbody
和div
标记。试试这个......
<body ng-app="myApp">
<div ng-controller="myAppController">
<script type="text/ng-template" id="tree_item.html">
<td>{{data.name}}
<table style="margin-left: 20px">
<tr ng-repeat="data in data.nodes" ng-include="'tree_item.html'"></tr>
</table>
</td>
</script>
<table class="table table-striped">
<thead>
<tr>
<th style="width:30px;">Test</th>
</tr>
</thead>
<tbody>
<tr style="width:100%" ng-repeat="data in treeData" ng-include="'tree_item.html'"></tr>
</tbody>
</table>
</div>