我遇到这个线程正在寻找类似的东西,但发现 $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 post,然后对 listPlayers 的下一次调用将执行 http get(未缓存)。
这使您无法管理其他人的 ($http) 缓存,并试图跟上哪些 url 用于请求以及哪些在正确的时间清除缓存。
我想这里的故事的寓意是使用图书馆,一切都会好起来的......除了任何错误或不完整的功能,但 Angular 没有任何这些;)
ps 这一切都在 AngularJS 1.2.0 上运行。