Как получить обновленные кэшированные данные в угловых JS
Я кеширую $http
данные с использованием модуля angular-cache. Я хочу позвонить $http
служба, если кэшированные данные обновляются. У меня проблема в том, что этот код возвращает только кэшированные данные, пока я не очищаю кеш вручную
//controller.js
angular.module('adminPanelApp').controller('recordController',recordController);
function recordController($scope,userService) {
$scope.title='FeedBacks From Users'; //This is Title to be sset to page
var promise = userService.getRecord(1);
promise.then(function (response) {
$scope.users = response;
});
}
//service.js
angular.module('adminPanelApp').service('userService', ['$http', '$q','CacheFactory', function ($http, $q,CacheFactory) {
CacheFactory('dataCache', {
cacheFlushInterval: 60, // This cache will clear itself every hour
deleteOnExpire: 'aggressive', // Items will be deleted from this cache when they expire
storageMode:'localStorage'
});
return {
getRecord: function (id) {
var deferred = $q.defer();
var start = new Date().getTime();
var dataCache = CacheFactory.get('dataCache');
if (dataCache.get(id)) {
deferred.resolve(dataCache.get(id));
} else {
$http.get('http://54.86.64.100:3000/api/v1/user/feedback-all', +id).success(function (data) {
dataCache.put(id, data);
console.log('time taken for request: ' + (new Date().getTime() - start) + 'ms');
deferred.resolve(data);
dataCache.get(id, data);
});
}
return deferred.promise;
}};//
}]);//end of service
1 ответ
1-й метод - автоматически, используя $ resource:
$ resource будет управлять кешем автоматически, поэтому нет необходимости принудительно очищать кеш. Идея состоит в том, что если у вас есть ресурс, который вы можете запросить, то ответ на запрос будет кэширован, но если вы сохраните что-то для этого же ресурса, ранее кэшированные данные должны быть недействительными, поэтому они будут очищены для вас.
2-й метод - принудительный кеш на основе события
Есть определенные случаи, когда angular не будет знать, что данные обновляются, и вам может потребоваться принудительное обновление на основе определенного действия. Вы можете сделать это, вызвав метод remove. В твоем случае:
dataCache.remove(key);