ng-repeat中的ng-repeat问题

时间:2016-11-13 22:45:51

标签: javascript angularjs

我有一个让我疯狂的奇怪问题

我基本上有一个不同类型的文章列表:新闻,推文和视频

我正在渲染它们:

<div ng-repeat="item in items | orderBy:-timestamp track by item.id" ng-switch="item.type">

        <?php  
             include("templates/ang-youtube.html");  
             include("templates/ang-tweet.html");
             include("templates/ang-news.html");
        ?>

</div>

在每个包含内部我都在做这样的事情:

<div class="item" masonry-brick ng-switch-when="news">
...content in here
</div>

<div class="item" masonry-brick ng-switch-when="tweet">
...content in here
</div>

<div class="item" masonry-brick ng-switch-when="youtube">
...content in here
</div>

现在问题是youtube项目总是先呈现。项目的顺序(时间戳)被忽略。推文和新闻项目虽然可以正确呈现。

如果我删除开关并将项目列为文本,那么一切都按正确顺序排列。一旦我添加了开关,youtube项目就会再次呈现。

任何想法我做错了什么?

我试过在ng-repeater中移动开关,如下所示:

<div ng-repeat="item in items | orderBy:-timestamp track by item.id">

    <div ng-switch="item.type">
            <?php  
                 include("templates/ang-youtube.html");  
                 include("templates/ang-tweet.html");
                 include("templates/ang-news.html");
            ?>

    </div>
</div>

但它没有任何区别。始终首先呈现youtube项目。

如果我检查$ scope.items数组,则按时间戳正确排序。

我也尝试过使用ng-if代替开关但得到相同的结果

有什么想法吗? : - (

还尝试使用像这样的ng-include:

<div ng-include="'templates/ang-{{item.type}}.html'"></div>

但这不起作用

1 个答案:

答案 0 :(得分:0)

DOH !!!需要添加此处概述的保留订单属性

https://github.com/passy/angular-masonry