Сервис для динамической загрузки нового контента в массив в Angular

0

Я хотел бы загрузить внешний контент JSON в область моих контроллеров. Инициировать мою область для первых десяти пунктов не проблема. Однако я хочу динамически расширить область с помощью новых элементов (путем прокрутки)

По какой-то причине пейджинг не работает в моей службе, когда я пытаюсь запустить функцию loadNews (counter). Однако, когда я регистрирую результаты ответа http-get в службе, отображаются правильные данные.

Когда я расширяю области новостей, он расширяется, но только с первыми страницами.

Вот мой маленький код.

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
    Вы можете опубликовать скрипку или что-то
  • 0
    Код кажется довольно простым и очевидным, верно? Почему ответ находится в $ scope.newsItems.push.apply ($ scope.newsItems, response.data); не отвечает от того, что в утверждении else?
Показать ещё 10 комментариев
Теги:
service

1 ответ

0

В конце концов я придумал заводское решение. Это сработало для меня.

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);
    });
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню