问题:如果我在回调尚未完成处理ion-view
时退出当前,回调将开始在循环中被调用,直到应用程序冻结,即使我不再在安装的视图中。on-finite
on-infinite
ion-infinite-scroll
这很难重现,但我找到了一种轻松体现它的方法。在视图上设置无限回调。
<ion-infinite-scroll
immediate-check="false"
on-infinite="loadMore()"
distance="5%">
</ion-infinite-scroll>
然后使用$timeout
人为地将功能减慢loadMore()
到 2 秒。像这样的东西:
$scope.loadMore = function() {
console.log("Loading more...");
$timeout(function() {
$scope.$broadcast('scroll.infiniteScrollComplete');
}, 2000);
};
现在,触发无限滚动,当你的loadMore()
函数“处理”2 秒时,离开你的视野。您会看到,即使您在另一个视图中,控制台也会继续每 2 秒打印一次“Loading more...”。也就是说,loadMore()
在循环中被调用。
在实际情况下,此错误会导致应用程序严重冻结。在某些链接上,此问题已得到解决,但没有解决方案(离子论坛已关闭 atm,顺便说一句)。那里的一些解决方案建议infiniteScrollComplete
在内部调用$apply()
,但这并不能解决问题,实际上会触发digest already in progress
错误。其他人建议使用$timeout(...,0)
它作为替代方案,$apply()
但问题仍然会出现,例如,如果您loadMore()
对服务器进行异步调用,在这种情况下,用户仍有可能在loadMore()
忙碌时退出视图。
有什么建议的解决方法吗?
Ionic 团队:这是一个错误。所有关于 ion-infinite-scroll 的文档都完全忽略了这一点。至少应该有一个警告。我的离子版本 1.7.16。