可以说我有10篇文章对象数组,每个与它自己的文章标题(假设他们中的一些具有相同的标题)Angularjs NG-重复使用条件
当我做NG-重复=“技术文章“和{{art.article_title}},它会打印标题10次,这不是我想要的。
我要像做
标题-1: 第1条 第2条 第3条
标题2: 第4条 第5条......
类似的东西,如果文章共享相同的标题。
感谢
可以说我有10篇文章对象数组,每个与它自己的文章标题(假设他们中的一些具有相同的标题)Angularjs NG-重复使用条件
当我做NG-重复=“技术文章“和{{art.article_title}},它会打印标题10次,这不是我想要的。
我要像做
标题-1: 第1条 第2条 第3条
标题2: 第4条 第5条......
类似的东西,如果文章共享相同的标题。
感谢
你应该write a custom filter,那么你就可以这样进行:
<li ng-repeat="unique_article in articles|dedup">
{{unique_article.article_title}}
<span ng-repeat="related in unique_article.related">
Article {{related.id}}
</span>
</li>
您的过滤器可能看起来例如像这样(假设你的文章按标题排序):
.filter('dedup', function() {
return function(articles) {
var deduped = [];
var last_article = null;
for(var i=0,max=articles.length;i<max;i++) {
var article = articles[i];
if(!last_article || last_article.article_title !== article.article_title)
{
article.related = [];
deduped.push(article);
last_article = article;
} else {
last_article.related.push(article);
}
}
return deduped;
};
});
(我没有测试它,只是临时编写它作为一个快速的例子,如果你的文章没有按标题排序,你将不得不修改它)
也许重新考虑它会有所帮助,那么做到这一点的理想方法是重新安排您的对象,使文章属于标题,如下所示。
var arrangeArticles = function() {
var result = {};
angular.forEach($scope.articles, function(article) {
var title = article.article_title;
if(!result[title]) {
result[title] = [article];
} else {
result[title].push(article);
}
});
$scope.articles = result;
$scope.$apply(); // Might be needed
};
我不认为你可以在ng-repeat
做到这一点,与你所表达的布局。
那么你就需要将重复更改为类似这样
<div ng-repeat="(title, group) in articles">
{{title}}
<div ng-repeat="article in group">
{{article.description}}
</div>
</div>
如果我这样做,说3个标题,每个包含10篇文章。 ng-repeat只会重复3次,但不会循环到文章中? – user2770348
当然答案更新 – iConnor
非常感谢,我会试试看 – user2770348
如果它帮助了你,不要犹豫,接受这个答案:) – adamziel