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

Javascript Angular.js:存储http.get请求中的变量以在不同的$scope函数中全局使用,javascript,angularjs,cordova,infinite-scroll,ionic-framework,Javascript,Angularjs,Cordova,Infinite Scroll,Ionic Framework,我正在尝试在我的Ionic/Cordova移动应用程序中实现无限滚动。MynextBatch变量保存用户到达页面底部后需要获取的下一组对象的url。唯一的问题是,当我尝试在我的loadMoreData()函数中访问它时,它显示为未定义。我尝试使用$rootScope只得到相同的结果。你知道我该怎么处理吗 谢谢 .controller('HomeCtrl', function($scope,Model) { var nextBatch; //holds the url of th

我正在尝试在我的Ionic/Cordova移动应用程序中实现无限滚动。MynextBatch变量保存用户到达页面底部后需要获取的下一组对象的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');
                })      
            }
};

 })

下面是如何使您的无限滚动同步。我的意思是在第一次调用(getAll完成)之前阻塞loadMore


为什么不直接将其设置为
$scope。不管是什么
?我也这样做了,结果显示为null,我认为这与异步行为有关,但我不确定loadMoreData是否被称为“太快”,我的意思是:当getAll尚未解析时。您可以在getAll之前启动承诺,并将loadMoreData设置为该承诺的解决方案。你可以用它来获得密码。另外,看起来你的无限卷轴只有2页:你没有在每次getMore后设置“下一个批次”…嗨@benek,是的,我知道我没有每次设置下一个批次,只是为了测试。另外,你能给我举个例子,我将如何在这种情况下设定承诺吗?我还是个新手
.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;
            });
          }    
      });
  };
})