Mi sono imbattuto in questo thread alla ricerca di qualcosa di simile, ma ho scoperto che $ resource gestirà automaticamente la cache, quindi non è necessario forzare la cancellazione della cache.
L'idea è che se hai una risorsa che puoi interrogare, quella risposta alla query verrà memorizzata nella cache, ma se salvi qualcosa per quella stessa risorsa, i dati precedentemente memorizzati nella cache devono essere non validi, quindi vengono cancellati per te. Ha senso che funzioni in questo modo.
Ecco un po 'di codice che uso per fare questo (puoi ignorare la parte di creazione di fabbrica forse dall'aspetto strano e prestare attenzione al corpo della "classe").
'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;
}]);
Se chiami più volte la funzione listPlayers, la prima chiamata effettua una richiesta http get e tutte le chiamate successive vengono memorizzate nella cache. Se chiami addPlayer, tuttavia, un post http viene eseguito come previsto, quindi la chiamata successiva a listPlayers eseguirà un recupero http (non memorizzato nella cache).
Ciò ti impedisce di gestire la cache di qualcun altro ($ http) e di cercare di tenere il passo con quali URL vengono utilizzati per le richieste e quali stanno svuotando le cache al momento giusto.
Suppongo che la morale della storia qui sia lavorare con la libreria e tutto andrà bene ... ad eccezione di eventuali bug o funzionalità incomplete, ma Angular non ne ha;)
ps Funziona tutto su AngularJS 1.2.0.
cache
-{boolean|Cache}
- Se true, verrà utilizzata una cache $ http predefinita per memorizzare nella cache la richiesta GET, altrimenti se un'istanza cache costruita con