Angular2 Meteor, issue实现无限滚动(滚动重置到顶部)



尝试做一个无限滚动页面,在用户滚动时显示元素。

所以每次我检测到滚动到达页面末尾时,我调用

this.recordLimit += 10;
this.subscribe('movements', {limit: this.recordLimit});

触发(autorun)

        this.autorun(h => {
            if (this.ready()) {
                this.items = Items.find(<potential limit filter here too>);
            }

好吧。这是有效的。但是,每次调用this.items = Items.find();时,用户的浏览器都会滚动到顶部。

这可能是因为dom元素被删除,滚动被重置,然后再次添加元素而不恢复之前的滚动位置。

明显有效的例子:

  • https://github.com/barbatus/ng-infinite-scroll/blob/master/scroll-controller.js
  • https://github.com/abecks/meteor-infinite-scroll
  • http://meteorpedia.com/read/Infinite_Scrolling

@###########编辑############@

实际上,我注意到,在Items.find()后面放一个h.stop()来停止订阅,这是有效的…我猜以前的芒果光标更新了最后的订阅限制。

然而,我仍然不能理解为什么这是重新绘制一切在最初的情况下。

我认为问题是您再次找到了您猜测的文档。您应该只订阅自动运行中的出版物。从Angular2 &流星教程很好地解释了pub/sub。

在自动运行中,它将重新运行find()并重新呈现所有文档,这就是为什么您只需要在自动运行中为您的情况重新运行订阅。由于发布/订阅和观察者的工作方式,因为您唯一更改的是函数中的"限制",其余部分不变,因此您的发布将只返回新文档,并保留先前返回的文档。客户端的find()查询将获取从pub/sub返回的文档,当文档数量发生变化时,它不会渲染已经获取的文档。

最新更新