$ ionicScrollDelegate不使用$ watch调整大小

时间:2016-06-14 06:16:24

标签: javascript angularjs ionic-framework

我正在使用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();
    });
};

0 个答案:

没有答案