Angular.js:将来自http.get请求的变量存储在不同的$ scope函数中全局使用

时间:2014-09-09 15:24:47

标签: javascript angularjs cordova infinite-scroll ionic-framework

我正在尝试在Ionic / Cordova移动应用程序中实现无限滚动。我的 nextBatch 变量将url保存到用户点击页面底部后需要获取的下一组对象。唯一的问题是,当我尝试在 loadMoreData()函数中访问它时,它会显示为未定义。我尝试过只使用$ rootScope来获得相同的结果。任何想法我应该如何处理这个?

谢谢!

.controller('HomeCtrl', function($scope,Model) {

        var nextBatch; //holds the url of the next batch
        $scope.model = []; //used in ng-repeat

        //loads an array of 5 objects
        Model.getAll().success(function(model){
            nextBatch        = model.meta.next; //for infinite scrolling 
            $scope.model     = model.objects; 
        })

        $scope.loadMoreData = function() {
            if (nextBatch !== undefined) {
                Model.getMore(nextBatch).then(function(model){
                   $scope.model.push(favours);
                   $scope.$broadcast('scroll.infiniteScrollComplete');
                })      
            }
};

 })

1 个答案:

答案 0 :(得分:1)

以下是如何使无限滚动同步的方法。我的意思是阻止loadMore直到第一次调用(getAll完成)。

.controller('HomeCtrl', function($scope, Model, $q) {
  var nextBatch; //holds the url of the next batch
  $scope.model = []; //used in ng-repeat

  var defer = $q.defer();
  var promise = defer.promise;

  //loads an array of 5 objects
  Model.getAll().then(function(model){
      nextBatch        = model.meta.next; //for infinite scrolling 
      $scope.model     = model.objects;
      defer.resolve(model);
      return defer.promise;
  });

  $scope.loadMoreData = function() {
      promise.then(function(result){
          if(nextBatch !== "END"){
            Model.getMore(nextBatch).then(function(favours){
              angular.forEach(favours.objects, function(item){
                $scope.model.push(item);
              });
              nextBatch = favours.meta.next;
            });
          }    
      });
  };
})

http://plnkr.co/edit/qohKNUd48czYKASNqCVP