Как синхронизировать данные с angular-данными

У меня есть угловой проект с угловыми данными для работы с моим Restful API.

моя ситуация выглядит следующим образом:

в моем сервисе я возвращаю defineresource, в моем контроллере я использую service.defineresource.findAll().then

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

Пожалуйста посоветуй

код: // в service.js

    .factory('Service', function(DS) {
     DS.defineresource({
        name: 'items'
        endpoint:'api/v2/users'
      });
     });

// в controller.js

    .controller('MainCtrl', function($scope, Service) {
      Service.findAll().then(function (data) {
        $scope.items = data
      });

   });

мой код выше извлекает все данные при первой загрузке, но после начальной загрузки он загружается только из кеша. У меня вопрос, есть ли способ синхронизировать и получать новые данные, не разрушая кеш.

2 ответа

Решение

Для принудительного обновления данных из бэкэнда необходимо установить bypassCache: true в опциях. Если вы не передадите это, то angular-data будет загружаться из кеша. Это задокументировано в документации API.

Для обновления данных каждые 15 минут используйте $timeout с 900000 миллисекунд. Чтобы иметь кнопку для обновления, используйте функцию объема, которая будет вызываться из ng-click на кнопке.

.controller('MainCtrl', function($scope, $timeout, Service) {
    $scope.refreshData = function () {
        Service.findAll({}, { bypassCache: true }).then(function (data) {
            $scope.items = data;
        });
    }

    $scope.refreshData();

    $timeout($scope.refreshData, 900000);
});
<button ng-click="refreshData()">Refresh</button>

Если вы используете только угловые маршруты, используйте:

$route.reload()

это перезагрузит / обновит вашу страницу. поэтому данные будут синхронизированы. вы можете использовать его в ng-click или проверить в вашем контроллере, когда вводятся новые данные, используйте его

  $route.reload()

если вы используете UI-Router, вы можете сделать то же самое, но вместо $route.reload() используйте это:

$state.go($state.current, {}, {reload: true});
Другие вопросы по тегам