似たようなものを探しているこのスレッドに出くわしましたが、$ 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で実行されています。
cache
–{boolean|Cache}
– trueの場合、デフォルトの$ httpキャッシュがGETリクエストのキャッシュに使用されます。それ以外の場合、キャッシュインスタンスが次のように構築されている場合