2013-09-26 48 views
1

可以说我有10篇文章对象数组,每个与它自己的文章标题(假设他们中的一些具有相同的标题)Angularjs NG-重复使用条件

当我做NG-重复=“技术文章“和{{art.article_title}},它会打印标题10次,这不是我想要的。

我要像做

标题-1: 第1条 第2条 第3条

标题2: 第4条 第5条......

类似的东西,如果文章共享相同的标题。

感谢

回答

0

你应该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; 
    }; 
}); 

(我没有测试它,只是临时编写它作为一个快速的例子,如果你的文章没有按标题排序,你将不得不修改它)

+0

非常感谢,我会试试看 – user2770348

+0

如果它帮助了你,不要犹豫,接受这个答案:) – adamziel

0

也许重新考虑它会有所帮助,那么做到这一点的理想方法是重新安排您的对象,使文章属于标题,如下所示。

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> 
+0

如果我这样做,说3个标题,每个包含10篇文章。 ng-repeat只会重复3次,但不会循环到文章中? – user2770348

+0

当然答案更新 – iConnor