我遇到了这个线程,寻找类似的东西,但是发现$ resource将自动为您管理缓存,因此无需强制清除缓存。
这个想法是,如果您拥有可以查询的资源,则将缓存该查询响应,但是如果您为该资源保存内容,则先前缓存的数据必须无效,因此将为您清除。它将以这种方式起作用是有道理的。
这是我用来执行此操作的一些代码(您可以忽略可能看起来古怪的工厂创建部分,并注意“ class”主体)。
'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用于请求以及在正确的时间清除缓存。
我想这里故事的寓意是与图书馆合作,一切都会好起来的……除了任何错误或不完整的功能,但Angular并没有这些;)
ps这全部在AngularJS 1.2.0上运行。
cache–{boolean|Cache}–如果为true,则将使用默认的$ http缓存来缓存GET请求,否则,如果使用以下实例构建的缓存实例