javascript - angularjs无限滚动不起作用

标签 javascript html angularjs infinite-scroll

我试图在 angularjs 中实现无限滚动,但没有成功。下面是我的 html 代码:

   <div ng-app='herbivore' ng-controller='Scroller'>
                      <div id="fixed" when-scrolled="loadMore()">
                        <div ng-repeat='item in items'>
                          <tr><td style="text-align:center">{{item.id}}</td>

               </div>                   
              </div>
            </div>

下面是我的 angularjs 代码:

     function Scroller($scope, $http) {
$scope.items = [];

var url = "/admin/getusers?type=" + "today";

 $scope.loadMore = function() {

    $http({
        'url': url,
        'method': 'GET'
    })
        .success(function (data) {

  var items = data.response;     
  for (var i = 0; i < items.length; i++) {
      if(i < 5)
          alert("item=" + items[i].id);    
    $scope.items.push({id: i});
  }

});
};
   $scope.loadMore();

}

angular.module('scroll', []).directive('whenScrolled', function() {
return function(scope, elm, attr) {
    var raw = elm[0];

    elm.bind('scroll', function() {
        if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
            scope.$apply(attr.whenScrolled);
        }
    });
};

});

我从示例中复制了大部分代码,但我不明白为什么它不起作用。我通过提醒响应来确保数据从我的 http get 返回。因此数据正在返回,但网页上没有显示任何内容。如有任何帮助,我们将不胜感激。

我再次显示我的代码,看来我的程序逻辑永远不会到达终点。

  function Scroller($scope, $http, $q, $timeout) {

  $scope.items = [];

 $scope.loadMore = function() {      

    var url = "/admin/getusers?type=" + "today";
    var d = $q.defer();
  $http({
        'url': url,
        'method': 'GET'
    })
        .success(function (data) {

  var items = data.response;      
  for (var i = 0; i < items.length; i++) {     
    $scope.items.push({username: items[i].username});
  }
  d.resolve($scope.items);     
  alert("end loop");

}
 );
  alert("d.promise");
return d.promise;       
 };
  alert("end of loadMore");

  $scope.loadMore();
 }

首先显示“d.promise”的警报。然后接下来会显示“结束循环”警报。 “loadMore 结束”的警报永远不会显示。有人可以显示我缺少哪些代码来使这些数据显示在我的网页中吗?我正在取回数据。

最佳答案

答案就在The Promise API

创建延迟实例时会创建一个新的 Promise 实例,并且可以通过调用 deferred.promise 来检索该实例。

Promise 对象的目的是允许感兴趣的各方在延迟任务完成时访问其结果。

方法

then(successCallback、errorCallback、notifyCallback) – 无论 Promise 何时被解决或被拒绝,一旦结果可用,就会异步调用成功或错误回调之一。使用单个参数调用回调:结果或拒绝原因。此外,在解决或拒绝 promise 之前,可以调用通知回调零次或多次以提供进度指示。

此方法返回一个新的 Promise,该 Promise 通过 successCallback、errorCallback 的返回值来解决或拒绝。它还通过notifyCallback方法的返回值进行通知。该 Promise 无法通过 notificationCallback 方法解决或拒绝。

catch(errorCallback) – Promise.then(null, errorCallback) 的简写

finally(callback) – 允许您观察 promise 的履行或拒绝,但这样做不会修改最终值。这对于释放资源或进行一些清理工作很有用,无论 promise 被拒绝还是解决。请参阅完整规范以获取更多信息。

由于finally是JavaScript中的保留字,而ES3不支持保留关键​​字作为属性名称,因此您需要调用promise'finally'等方法来使您的代码兼容IE8。

关于javascript - angularjs无限滚动不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785688/

相关文章:

javascript - 未指定 id 时的 addEventListener()

html - 使用 VBA 解析 HTML 内容

html - 下拉导航列表

javascript - 无法使用按钮添加 DIV 元素

javascript - 固定网站加载时间?

Javascript 随机段落交换,以任何随机顺序

angularjs - 未提供任何项目时隐藏 Angular ngGrid

javascript - AngularJS 变量的变量范围/嵌套

angularjs - 添加新项目后,ng Repeat会重新渲染所有项目吗?

javascript - React,映射中等复杂的 json 对象以获取消息内的键