Я наткнулся на этот поток в поисках чего-то похожего, но обнаружил, что $ resource будет управлять кешем автоматически, поэтому нет необходимости принудительно очищать кеш.
Идея состоит в том, что если у вас есть ресурс, который вы можете запросить, этот ответ на запрос будет кэширован, но если вы сохраните что-то для того же ресурса, ранее кэшированные данные должны быть недействительными, поэтому они будут очищены для вас. Имеет смысл, что так и будет.
Вот код, который я использую для этого (вы можете проигнорировать, возможно, странно выглядящую часть создания фабрики и обратить внимание на тело "класса").
'use strict';
sampleApp.players.$ng.factory('sampleApp.players.PlayerService', [
'$log',
'$resource',
sampleApp.players.PlayerService = function ($log, $resource) {
var service = {};
$log.info('Creating player resource.');
var Player = $resource('/api/players', {}, {query: {
isArray: true,
cache: true,
method: 'GET'
}});
service.addPlayer = function(playerName) {
$log.info('Saving a new player.');
return new Player({name: playerName}).$save();
};
service.listPlayers = function () {
$log.info('Fetching players.');
return Player.query();
};
return service;
}]);
Если вы вызываете функцию listPlayers несколько раз, первый вызов делает HTTP-запрос на получение, а все последующие вызовы кэшируются. Если вы вызываете addPlayer, HTTP-сообщение выполняется, как ожидалось, а затем следующий вызов listPlayers выполнит HTTP-получение (не кешируется).
Это избавляет вас от необходимости управлять чужим ($ http) кешем и пытаться следить за тем, какие URL-адреса используются для запросов, а какие очищают кеши в нужное время.
Я полагаю, что мораль этой истории заключается в том, чтобы поработать с библиотекой, и все будет хорошо ... за исключением каких-либо ошибок или неполных функций, но в Angular их нет;)
ps Все это работает на AngularJS 1.2.0.
cache
-{boolean|Cache}
- Если это правда, для кеширования запроса GET будет использоваться кеш $ http по умолчанию, в противном случае, если экземпляр кеша построен с