Обновление данных из вызова API

#angularjs

#angularjs

Вопрос:

У меня есть контроллер и сервис примерно такие:

 .controller('BooksCtrl', function($scope, bookService) {
     bookService.getBooks().then(function(response) {
       $scope.books = response.data;
    });
})

.factory('bookService', function($http) {
    return {
        getBooks: function() {
            return $http.get('http://books.com/books').success(function(response) {
                return response;
            });

        }
    }
})
  

Всякий раз, когда я перехожу к маршруту, соответствующему BooksCtrl , список книг на моем экране становится пустым (во время выполнения GET вызова), а затем перерисовывается со свежими данными.

Какой хороший способ избежать этого обновления на странице, сохранить существующие данные во время выполнения GET вызова, а затем просто обновить экран?

Я думал о том, чтобы сохранить все книги в свойстве bookService , присвоить его $scope.books в контроллере, а затем обновлять это свойство только после завершения GET вызова (я бы назвал что-то вроде bookService.updateBooks() в контроллере). Это разумно или есть более простой / лучший способ?

Комментарии:

1. Происходит ли это поведение «только» всякий раз, когда вы переходите к просмотру, соответствующему ‘BooksCtrl’? Или когда вы находитесь в том же представлении, и вызов службы обновляет данные?

2. Вызов службы выполняется только при запуске контроллера. Пока просмотр / маршрут активен, данные не обновляются.

3. Смотрите, когда вы переходите к новому представлению, все старые данные в предыдущем представлении выходят за рамки. Новый контроллер войдет в область видимости и перезагрузит все данные и создаст представление с нуля.

4. Да, но мне интересно, могу ли я что-то с этим сделать. Передайте в представление кэшированный список книг, пока я, например, извлекаю новый список. Мне интересно, делают ли / как люди это делают.

5. Я думаю о других подходах. В вашем старом представлении отображается список книг, и вам нужно, чтобы ваше новое представление отображало тот же список книг (без повторного рендеринга) и включало что-то еще в это новое представление вместе с книгами… верно? Можете ли вы показать вам HTML-страницы для этого старого и нового представлений? Возможно, здесь может пригодиться ng-include, но я не уверен, пока не попробую.