【发布时间】:2015-10-04 20:01:10
【问题描述】:
我正在使用带有ngInfiniteScroll 和angular-masonry 的AngularJS。
我目前在 PHP 中有一些前端部分,但我正在尝试将所有内容迁移到 HTML+JS。
目前运行良好:
<div id="flagevent-container"
infinite-scroll='getFlags()'
infinite-scroll-disabled='loadingMore'
infinite-scroll-distance='0'
masonry="{'gutter': 10}" preserve-order load-images="false"
item-selector=".flagevent">
<div masonry-brick id="flagevent{{flagevent.id}}" class="flagevent"
ng-repeat="flagevent in flagsInWall">
<?php include "flagevent.inc.html"; ?>
</div>
</div>
现在我想从 PHP 的 include 转移到 Angular 的 ng-include。我将在masonry-brick 级别插入:
<div id="flagevent-container"
infinite-scroll='getFlags()'
infinite-scroll-disabled='loadingMore'
infinite-scroll-distance='0'
masonry="{'gutter': 10}" preserve-order load-images="false"
item-selector=".flagevent">
<div masonry-brick id="flagevent{{flagevent.id}}" class="flagevent"
ng-repeat="flagevent in flagsInWall"
ng-include="'flagevent.inc.html'">
</div>
</div>
但是无限滚动不起作用;方法getFlags() 在不滚动的情况下被重复调用,从而检索所有项目,并且一次加载所有元素。
发生了什么事?
【问题讨论】:
-
可能是因为您现在是在客户端加载内容,而不是从服务器发送,页面第一次加载无限滚动内容是空的,因此立即到达末尾并且调用 getFlags?
-
嗯听起来很合理......
-
如果所有的 getFlags 函数只是在 flagsInWall 变量中添加一些值,它应该只被调用一次。 ://
-
每次它调用一个返回多个对象的服务,这些对象被添加到
flagsInWall,但应该只在接近滚动结束时触发,而不是一起进行所有调用
标签: javascript angularjs infinite-scroll masonry