似たようなものを探してこのスレッドに出くわしましたが、$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 get 要求が行われ、それ以降のすべての呼び出しがキャッシュされます。ただし、addPlayer を呼び出すと、期待どおりに http ポストが実行され、次の listPlayers の呼び出しで http get (キャッシュされない) が実行されます。
これにより、他の誰かの ($http) キャッシュを管理し、どの URL がリクエストに使用され、どの URL が適切なタイミングでキャッシュをクリアしているかを把握する必要がなくなります。
ここでの話の教訓は、ライブラリと連携することであり、すべてがうまくいくと思います...バグや不完全な機能を除いて、Angularにはそれらのいずれもありません;)
psこれはすべてAngularJS 1.2.0で実行されています。