服务动态加载角度数组中的新内容

服务动态加载角度数组中的新内容

问题描述:

我想将外部JSON内容加载到我的控制器范围。开始我的前十个项目的范围是没有问题的。但我想要的是动态扩大新项目的范围(滚动)服务动态加载角度数组中的新内容

由于某种原因,当我尝试运行loadNews(counter)函数时,分页在我的服务中不起作用。然而,当我在服务中记录http获取响应的结果时,显示正确的数据。

当我扩大范围newsitems时,它会扩大,但只有第一页的项目。

这是我的一点点代码。

app.service('newsService', function ($http, $q) { 
    var deferred = $q.defer(); 
    var deferred2 = $q.defer(); 
    this.loadNews = function (counter) { 
    if (counter == undefined) { 
     $http.get('http://domain.com/wp- json/wp/v2/posts').then(function (response) { 
     deferred.resolve(response); 
     }); 
     return deferred.promise; 
    } else { 
      console.log(counter); // This returns a correct counter 
      $http.get('http://domain.com/wp-json/wp/v2/posts?page=' + counter).then(function (response) { 
      deferred2.resolve(response); 
     }); 
     return deferred2.promise; 
    } 

    } 
}); 

app.controller('homeNewsCtrl', function ($scope, $http, $timeout, $cordovaSplashscreen, newsService) { 

    $scope.count = 1; 

    var promise = newsService.loadNews(); 
    promise.then(function (response) { 
    $scope.newsItems = response.data; 
    }); 

    $scope.loadMore = function (counter) { 
    $scope.count += counter; 
    var promise = newsService.loadNews($scope.count); 
    promise.then(function (response) { 
     $scope.newsItems.push.apply($scope.newsItems, response.data); 
    }); 
    }; 
}); 
+0

你可以发布一个小提琴什么的 – gaurav5430

+0

代码看起来很直截了当,显而易见的权利?为什么在$ scope.newsItems.push.apply($ scope.newsItems,response.data);而不是来自else语句中的响应? –

+0

是否检查了数组值,它们是否被添加 – gaurav5430

最终我想出了一个工厂解决方案。这对我有效。

app.factory('newsItems', function ($http) { 
    return { 
    getNews: function (counter) { 
     if (counter != undefined) { 
     return $http({ 
      url: 'http://www.domain.com/wp-json/wp/v2/posts?page=' + counter, 
      method: 'GET' 
     }) 
     } else { 
     return $http({ 
      url: 'http://www.domain.com/wp-json/wp/v2/posts', 
      method: 'GET' 
     }) 
     } 
    } 
    } 
}); 


$scope.loadMoreNews = function (counter) { 
    $scope.count += counter; 
    newsItems.getNews($scope.count).then(function (response) { 
     $scope.newsItems.push.apply($scope.newsItems, response.data); 
    }); 
};