这是我的数据结构:
headings = [
{name:'H1', items: ['a', 'b', 'c']},
{name:'H2', items: ['d', 'e', 'f']}
];
我希望得到这个:
<li ng-repeat="heading in headings" class="heading">{{ heading.name }}</li>
<li ng-repeat="item in heading">{{ item.name }}</li>
但在第二个ng-repeat
中,heading
不存在。同时,我不想将第二个li
嵌套在第一个<!-- ng-repeat="heading in headings" -->
<li class="heading">{{ heading.name }}</li>
<li ng-repeat="item in heading">{{ item.name }}</li>
<!-- end-repeat -->
内。
这可以解决吗?
我正在考虑某种评论解决方案,但我想这是淘汰语法:
{{1}}
答案 0 :(得分:4)
您可以使用ng-repeat-start
和ng-repeat-end
:
<li ng-repeat-start="heading in headings" class="heading">{{ heading.name }}</li>
<li ng-repeat="item in heading.items" ng-repeat-end>{{ item }}</li>
ng-repeat-start
重复所有内容,直到并包含ng-repeat-end
元素。
答案 1 :(得分:1)
你可以用一个额外的元素包装lis并在该元素上加上ng-repeat。如果列表中没有其他li项,只需将ng-repeat放在列表中:
<ul ng-repeat="heading in headings">
<li class="heading">{{ heading.name }}</li>
<li ng-repeat="item in heading.items">{{ item }}</li>
</ul>
有关可运行的示例,请参阅此Plunker。
答案 2 :(得分:1)
你可以压扁它们:
$scope.$watch('headings', function(headings) {
$scope.flattened = [];
angular.forEach(headings, function(heading) {
angular.forEach(heading.items, function(item) {
$scope.flattened.push({
heading: heading,
item: item
});
});
});
});
然后在你的HTML中:
<li ng-repeat="flat in flattened">{{flat.item.name}}</li>