如何使用延迟加载在ng-repeat中将项添加到数组中

时间:2017-08-10 15:51:46

标签: angularjs angularjs-ng-repeat lazy-loading

我有一系列评论。对于每个评论,我都有一个隐藏的表单,您可以回复。数组的每个对象中的该项称为: comment.showSubCommentForm 。当我点击回复时,我希望能够回复评论和名为 commentOnSubPost 的功能。

我将数据加载到10块(延迟加载)中,我正在使用无限滚动距离Angular模块。每当我到达页面末尾时,我会得到接下来的10个项目并将它们添加到$ scope.comments数组中,您可以在下面看到我在 上运行我的ng-repeat。

问题是,虽然 commentOnSubPost 工作得非常好,因为它添加了对评论的回复,我重新加载了数据,因此我可以使用新的回复获取更新的$ scope.comments 。但是 - 因为我已经实现了延迟加载,如果说我在第20页,我该怎么做呢?

我查看了一些类似的帖子,但他们的方法与我的方法截然不同,所以我很丢失。

我的HTML:

<div infinite-scroll='loadMore()' infinite-scroll-distance='1'>
<div class="row">
<div ng-repeat="comment in comments track by $index">
 <ul class="comments">
  <li class="clearfix">
   <a ng-href="#">SomeLink</a>
   <div>
    <p >{{ comment.date }} <a ng-href="/wall#/profile/main/{{ comment.userID }}">{{ comment.fullname }}</a> says <i class="commentReply"><a href ng-click="comment.showSubCommentForm = !comment.showSubCommentForm"><small>Reply</small></a></i></p>
    <p class="mainComment">
     {{ comment.comment }}
     <p class="meta"><i class="showReply"><a href ng-click="comment.showReplies = !comment.showReplies"><small>Show Replies</small></a></i></p>
    </p>
   </div>
   <div ng-show="comment.showSubCommentForm">
    <form ng-submit="commentOnSubPost( post._id, comment._id, subComment)">
     <div class="form-group">
      <div class="form-group">
       <textarea ng-model="subComment" class="form-control" placeholder="Reply to the above comment"></textarea>
      </div>
      <input type="submit" value="Reply">
     </div>
    </form>
   <div ng-show="comment.showReplies" ng-repeat="subComment in comment.subComments track by $index">
    <ul class="comments">
     <li class="clearfix">
      <a ng-href="/wall#/profile/main/{{ comment.userID }}"><img ng-src="{{ subComment.profilePic }}" class="avatar" style="border-radius: 50%"></a>
      <div class="post-subComments">
       <p class="meta">{{ subComment.date }}<a ng-href="SomeLink"> {{ subComment.fullname }}</a></p>
       <p>
        {{ subComment.comment }}
       </p>
      </div>
     </li>
    </ul>
   </div>
  </li>
 </ul>
 </div>
</div>

我不会在这里添加太多信息,因为我不想超载此帖,但如果您需要任何特定信息,请告诉我。我只需要知道如何重新加载数据(或者如果还有其他方法),以便我可以获得最新数据。

我希望这是有道理的。

提前致谢!

2 个答案:

答案 0 :(得分:0)

就像你有$ scope.comments = [];然后在每次调用时,您只需将即将到来的数据附加到此数组。 像$ scope.comments = $ scope.comments.concat(response.data); 通过这种方式,延迟加载将起作用。

答案 1 :(得分:0)

我通过创建一个Node路由来修复它,它返回了我刚刚添加的确切注释。然后,我在我的$ scope.comments中找到了commentID,并将其作为我在本地的子系统的子组件。

它完成工作,数据是真实的。一个缺点是,如果在那个时候还有其他评论,那么在页面刷新之前它不会出现,但我对此并不太感兴趣。