비슷한 것을 찾고있는이 스레드를 발견했지만 $ 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 요청을 캐시하는 데 사용됩니다. 그렇지 않으면 캐시 인스턴스가 다음으로 빌드 된 경우