1

10個の記事オブジェクト配列があり、それぞれに独自の記事タイトルがあるとしましょう(それらのいくつかに同じタイトルがあると仮定します)

ng-repeat="art in article" と {{ art.article_title }} を実行すると、タイトルが 10 回印刷されますが、これは私が望むものではありません。

私は何かをしたい

タイトル-1: 記事 1 記事 2 記事 3

タイトル-2: 記事 4 記事 5......

記事が同じタイトルを共有している場合、そのようなもの。

ありがとう

4

2 に答える 2

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>
于 2013-09-26T17:56:47.093 に答える
0

カスタム 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;
  };
});

(私はそれをテストしませんでした。簡単な例としてアドホックに書いただけです。また、記事がタイトルでソートされていない場合は、変更する必要があります)

于 2013-09-26T17:56:06.933 に答える