代码之家  ›  专栏  ›  技术社区  ›  noneJavaScript

如何在ngGridEventScroll上使用页面滚动?

  •  6
  • noneJavaScript  · 技术社区  · 9 年前

    使用ngGridv2.X,我试图开发一个在页面滚动(而不是网格滚动)到达底部时加载更多数据的网格。

    通过搜索类似的问题,我找到了解决我的 第一个问题 : ngGrid必须具有动态高度 ,所以我做到了

    .ngViewport{ height:auto !important; } .ngCanvas, .ngViewport, .ngRow, .ngFooterPanel, .ngTopPanel { width: 100% !important; } .ngRow { border-bottom:none !important; }
    

    这把我带到 我的第二个问题。 我需要通过滚动加载数据,我发现: ng网格事件滚动 ,但不是 仅当使用ngGrid实习生滚动时触发,我需要页面滚动

      $scope.$on('ngGridEventScroll', function () {
            $scope.currentDataPosition++;
            $scope.setPagingData($scope.dataArray, $scope.currentDataPosition, $scope.pagingOptions.pageSize);
        });
    

    因此,解决方案1打破了解决方案2,因为ngGridEventScroll不再具有实习生滚动。

     $scope.setPagingData = function (data, page, pageSize) {
            cfpLoadingBar.start();
            var pagedData = data.slice((page - 1) * pageSize, page * pageSize, page * pageSize);
            $scope.totalServerItems = data.length;
            $scope.myData = pagedData;
            cfpLoadingBar.complete();
        };
    
     $scope.gridOptions = {
            data: 'myData',
            virtualizationThreshold: 50,
            enableRowSelection: false,
            enablePaging: false,
            enableSorting: false,
            showFooter: false,
            pagingOptions: $scope.pagingOptions,
            filterOptions: $scope.filterOptions,
        }
    

    可以做什么?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Anthony Garant    9 年前

    你可以使用ngInfiniteScroll( https://sroze.github.io/ngInfiniteScroll/index.html )并应用以下策略。

    在您的控制器中

        $scope.limit = 50; // Initial limit (make sure its enough to cover the whole page, otherwise the raiseLimit function might not be called)
        $scope.raiseLimit = function() { // function called by ngInfiniteScroll
             if ( $scope.limit < data.length) {
                 $scope.limit += 10; // adjust to your need
             } else {
                 $scope.dataLoaded = true;
             }
        }
        $scope.dataLoaded = false; // prevent useless call
        $scope.myData = $filter('limitTo')(data, $scope.limit); // Do not forget to inject $filter into your controller
    

    在您的html中

        <div infinite-scroll='raiseLimit()' infinite-scroll-disabled='dataLoaded'>
            <!-- put your grid with dynamic height here -->
        </div>