我正在使用Ionic构建应用程序,并且某些功能会将新数据集加载到现有视图中。
当我这样做时,有时如果我向下滚动,并且新数据占用的空间比前一个少,我将留下一个空白屏幕,直到我向后滚动到新数据的位置。
为了防止这种情况,我正在运行$ionicScrollDelegate.resize();
,但它不会刷新。如果我滑动(重新加载数据)两次,它会调整视图大小并在必要时将向上滚动起来,但是如果我只做一次,则滚动调整大小,但不会自动启动用户。他们必须首先开始滚动,然后将它们捕捉回实际存在数据的滚动区域。
我设法通过使用手表来解决这个问题:
$scope.$watch(function(scope) { return scope.projects },
function() {
$ionicScrollDelegate.$getByHandle('taskScroll').resize();
}
);
但出于性能原因,我不想使用$watch
。我尝试使用各种方法让调整大小来调用要重新加载的数据,包括$apply
,$evalAsync
,$timeout
......
除$timeout
外,它们都没有工作,但只有在间隔为500毫秒时才有效。这告诉我这是加载数据的速度的问题,这就是$watch
工作的原因,因为它一直在寻找。
我还能做些什么来立即调整大小?这是事件处理函数的代码:
$scope.onSwipeRight = function () {
var operatingDate = appContextService.getOperatingDate()
.subtract(1,'days')
.startOf('day');
var pastDate = moment().subtract(1,'years')
.startOf('year')
.startOf('isoWeek');
if (isSwipeEnabled && operatingDate.isAfter(pastDate)) {
slideInCacheValidation(-1);
}
// Just one attempt at fixing this below, I've tried so many things that do not work...
$scope.$eval( function() {
$ionicScrollDelegate.$getByHandle('taskScroll').resize();
});
};