每当调用函数时,如何在数组中推送元素?

时间:2016-07-21 06:12:32

标签: arrays angularjs http ionic-framework infinite-scroll

我正在实施无限滚动。我有一个名为hotels的数组,它从$http.get()方法获取数据。现在,我想填充一个名为array的新hotelsNew[],其值为hotels数组。但我希望在hotelsNew递增值mj中推送值。

每当调用函数m时,jloadMore()的值都需要更新(递增)。 m的初始值为0,j为5.当loadMore()被调用时,m将再次为5,j将为10,依此类推。

我无法将mj的值保存在任何地方,因为$http.get()是异步的。有没有正确的方法可以保存mj的值,并在再次调用loadMore()时重复使用它?最大j值为40.当m = j(40)时,它将停止。

这是我的控制器代码。

 $scope.loadMore = function() {
      $http.get(url).success(function(data, status, headers, config) {
        if(data) { 
          $scope.hotels = data.hotels;
            for(var i = m; i < j; i++) {
              console.log('i=',i);
              $scope.hotelsNew.push($scope.hotels[i]);
              console.log('hotelsNew',$scope.hotelsNew);
            }
         }
     }

如何增加mj值?任何想法?

3 个答案:

答案 0 :(得分:1)

如果mj每次增加相同的金额,您可以在控制器中创建一个局部变量。

var m = 0, j = 5;
$scope.loadMore = function() {
    $http.get(url).success(function(data, status, headers, config) {
        if(data && j < 40) { 
            $scope.hotels = data.hotels;
            for(var i = m; i < j; i++) {
                console.log('i=',i);
                $scope.hotelsNew.push($scope.hotels[i]);
                console.log('hotelsNew',$scope.hotelsNew);
            }
            m += 5;
            j += 5;
        }
    }
}

答案 1 :(得分:0)

使用承诺避免异步调用

$scope.loadMore = function() {
  $http.get(url).then(function(data) {
    if(data) { 
      $scope.hotels = data.hotels;
        for(var i = m; i < j; i++) {
          console.log('i=',i);
          $scope.hotelsNew.push($scope.hotels[i]);
          console.log('hotelsNew',$scope.hotelsNew);
        }
     }
 }

答案 2 :(得分:-1)

请参阅推送数组的示例:

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.push(&#34;猕猴桃&#34);

使用

获取数据长度

$ S = Array.sizeof($数据)

for($i<0;$i<=$s;$i++){//task here}