我正在浏览一组引用记录ng-repeat
,如下所示:
<div ng-repeat="quote in quotes">
<h3>{{quote.chaptertitle}}</h3>
<div>"{{quote.body}}"</div>
</div>
每章有很多引号,当然我只想在显示记录时第一次显示章节标题。
这样做的最佳方法是什么,例如在范围内创建一个保留变量,然后使用ng-if
进行检查,或者使用ng-repeat
还有另一种更简单的方法吗?
答案 0 :(得分:2)
你确实可以使用ng-if
:
<h3 ng-if="quote.chaptertitle != quotes[$index-1].chaptertitle">{{quote.chaptertitle}}</h3>
我个人更喜欢首先使用嵌套结构(章节 - &gt;引用)。其他人建议的现有分组解决方案也很好。
答案 1 :(得分:1)
您可能希望按chaptertitle
<div ng-repeat="(key, value) in quotes | groupBy: 'chaptertitle'">
<h3>{{ key }}</h3>
<div ng-repeat="quote in value">
"{{quote.body}}"
</div>
</div>
更新:
groupBy
过滤器来自https://github.com/a8m/angular-filter,此处托管http://cdnjs.com/libraries/angular-filter
答案 2 :(得分:0)
您可以更改引号数组,这样如果标题相同,则将其设置为undefined:
var chapterTitle;
for (var i = 0; i < $scope.quotes.length; i++) {
var quote = $scope.quotes[i];
if (quote.chaptertitle !== chapterTitle) {
chapterTitle = quote.chaptertitle
}
else {
quote.chaptertitle = undefined;
}
}
然后在您的视图中,您可以在h3上使用ng-if
:
<div ng-repeat="quote in quotes">
<h3 ng-if="quote.chaptertitle != undefined">{{quote.chaptertitle}}</h3>
<div>"{{quote.body}}"</div>
</div>
但通常我会改变我的数据结构(在后端),所以它会是这样的:
$scope.chapters = [
{
title: 'one',
quotes: [
{
body: 'body1'
},
{
body: 'body2'
}
]
},
{
title: 'two',
quotes: [
{
body: 'body3'
},
{
body: 'body4'
}
]
}
];
然后你会使用嵌套重复:
<div>
<h3 ng-repeat-start="chapter in chapters">{{chapter.title}}</h3>
<div ng-repeat="quote in chapter.quotes" ng-repeat-end>"{{quote.body}}"</div>
</div>
答案 3 :(得分:0)
您可以使用当前索引并与之前的记录进行比较。使用你的HTML
<div ng-controller="MyCtrl">
<div ng-repeat="quote in quotes">
<h3 ng-hide="equalPrevious($index)">{{quote.chaptertitle}}</h3>
<div>"{{quote.body}}"</div>
</div>
</div>
使用以下控制器
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.quotes = [
{ chaptertitle: 'Hello', body: '1' },
{ chaptertitle: 'Hello', body: '2' },
{ chaptertitle: 'Hello1', body: '3' }
];
$scope.equalPrevious = function(index) {
return index != 0 &&
$scope.quotes[index].chaptertitle == $scope.quotes[index -1].chaptertitle;
};
}
运行时会显示以下结果(和jsfiddle)
您好
&#34; 1&#34;
&#34; 2&#34;
Hello1
&#34; 3&#34;