2

我正在使用ui-scroll在我的 Angular 应用程序中实现无限滚动。

它运行良好,我正在使用它来显示事件列表。

但是,当我的应用程序加载时,它默认显示第一个事件(1实际上是索引)。要查看最近的事件,必须向下滚动事件列表。当事件列表非常大并且有点无法分页加载时,这是一个问题,因为 Web 应用程序必须遍历所有事件才能获取最新事件。

如何指示ui-scroll从最后一个事件开始?显然,我有一个后端方法(一个HEAD我可以用来获取事件总数的请求)来获取最初想要的索引。我只是找不到将初始索引放入ui-scroll的方法。

有什么线索吗?


根据要求,这是一个代码示例,尽管它是非常“标准”的ui-scroll东西:

<ul ui-scroll-viewport class="event-list" ng-class="{loading: eventsLoading}">
  <li ui-scroll="event in eventsProvider" data-buffer-size="20" is-loading="eventsLoading">
    <p>event.text</p>
  </li>
</ul>

这是我在控制器中的内容:

$scope.eventsProvider = {
  get: function(index, count, success) {
    $scope.events = ZoneEventsService.query({
      session_type: $scope.session_type,
      zone: $scope.zone,
      offset: index - 1,
      limit: count
    }, function(result) {
      success(result.items);
    });
  }
};
4

1 回答 1

1

我其实找到了一种方法。在我的控制器中,我推迟了数据的第一次加载,并通过事件总数手动偏移了我的偏移量。由于ui-scroll开箱即用地处理负偏移量,因此它可以正常工作。

$scope.eventsInfo = ZoneEventsService.head({
  session_type: $scope.session_type,
  zone: $scope.zone,
  limit: 0,
});

$scope.eventsProvider = {
  get: function(index, count, success) {
    // The promise will wait the first time around and be resolved already on following calls.
    $scope.eventsInfo.$promise.then(function() {
      $scope.events = ZoneEventsService.query({
        session_type: $scope.session_type,
        zone: $scope.zone,
        // Here goes the magic.
        offset: index - 1 + $scope.eventsInfo.total_count,
        limit: count
      }, function(result) {
        success(result.items);
      });
    });
  }
};
于 2016-01-19T16:24:35.080 回答