问题:如果我退出当前 ion-view
当on-finite
回调未完成处理,on-infinite
回调将开始在循环中被调用,直到应用程序卡住,即使我不再在 View 中 ion-infinite-scroll
已安装。
这很难重现,但我找到了一种轻松体现它的方法。在 View 上设置无限回调。
<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 秒,离开你的看法。您会看到,即使您在另一个 View 中,控制台也会每 2 秒继续打印“正在加载更多...”。即,loadMore()
正在循环中调用。在真实情况下,此错误导致应用程序严重卡住。在某些链接上,此问题已得到解决,但没有解决方案( ionic 论坛已关闭 atm,顺便说一句)。一些解决方案建议调用
infiniteScrollComplete
在 $apply()
内,但这并不能解决它,实际上会触发 digest already in progress
错误。其他人建议使用$timeout(...,0)
作为 $apply()
的替代方案但如果,例如,您的 loadMore()
,问题仍然会出现。对您的服务器进行异步调用,在这种情况下,用户仍有可能在 loadMore()
时退出 View 忙。是否有任何建议的解决方法?
ionic 团队:这是一个错误。所有关于 ion-infinite-scroll 的文档都完全忽略了这一点。至少应该有警告。我的 ionic 版本 1.7.16。
最佳答案
尝试以下代码以停止加载更多回调。
html
<ion-view view-title="Search">
<ion-content>
<h1>Search</h1>
<ion-infinite-scroll
immediate-check="false"
ng-if="!noMoreItemsAvailable"
on-infinite="loadMore()"
distance="5%">
</ion-infinite-scroll>
</ion-content>
</ion-view>
Controller
$scope.loadMore = function()
{
$http({
method:'GET',
url:'http://headers.jsontest.com/'
}).then(function(response)
{
console.log(response);
$scope.noMoreItemsAvailable = true;
}, function(response)
{});
}
关于ionic-framework - ionic 无限滚动循环永远调用无限回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43302746/