从列表列表中重复

时间:2014-11-18 15:25:44

标签: .net angularjs angularjs-ng-repeat

我想要在列表中打印出当前的数据结构:

public class Topic
{
    [Key]
    public int ID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual ICollection<FAQ> FAQs { get; set; }
}


public class FAQ
{
    [Key]
    public int ID { get; set; }

    [Required]
    public string Question { get; set; }
    public string Answer { get; set; }
    public DateTime DateCreated { get; set; }
    public int Likes { get; set; }

    [Required]
    public int TopicID { get; set; }
    [ForeignKey("TopicID")]
    public virtual Topic Topic { get; set; }

}

在我的角度控制器中,我收到一个主题列表,其中包含常见问题解答列表并将其绑定到$ scope.topics。

我已经使用嵌套的ng-repeat打印了所有常见问题解答。

现在我想做一个&#34;前十名&#34;列表,最喜欢的十大常见问题解答。类似的东西:

<ol ng-repeat="faq in faqs(topic.FAQs in topic) | orderBy: 'Likes'">
    <li>{{ faq.Question }} - {{ faq.Likes }}</li>
</ol>

我很难如何提取所有常见问题解答的集合。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果我的答案是正确的,我怀疑你可以从视图中做到这一点,但也许控制器中的观察者可以做到这一点,当然这假设你的主题结构不断变化为常见问题,某些事情像:

假设json结构

{主题:{id:1,名称:&#39; asd&#39;,常见问题解答:[{Likes:324,...},{...},...]},{.. 。},...}

$scope.topics = [...]; // A collection like above
$scope.top_faqs = [];
$scope.$watchCollection('topics', function(){
    var i = $scope.topics.length;

    while(i--){ //Use while for faster loops
        var j = $scope.topics[i].FAQs.length;
        while(j--){
           $scope.top_faqs.push(topics[i].FAQs[j]);
        }
    }
    // Inject $filter in your controller as a dependency
    $scope.top_faqs = $filter('orderBy')($scope.top_faqs, 'Likes', false);
    $scope.top_faqs = $filter('limitTo')($scope.top_faqs, 10);
});

现在,在您的视图中,您只需对$scope.top_faqs

执行常规ng-repeat
<ol ng-repeat="faq in top_faqs">
    <li>{{ faq.Question }} - {{ faq.Likes }}</li>
</ol>