Angular에서 $resource 캐시를 새로 고치거나 비활성화하는 방법JS
다음과 같은 기본 $http 캐시 구현을 사용하는 간단한 사용자 $리소스가 있습니다.
factory('User', function($resource){
return $resource(endpoint + '/user/current/:projectId', {},
{get:
{
cache: true,
method: 'GET'
}
}
);
})
이 방법은 매우 잘 작동합니다. 즉, 응용 프로그램에서 서버가 한 번만 호출되고 캐시에서 값이 가져옵니다.
단, 특정 조작 후에 서버의 값을 갱신할 필요가 있습니다.그렇게 할 수 있는 쉬운 방법이 있을까요?
감사해요.
부울을 유지한 후$http캐시:
var $httpDefaultCache = $cacheFactory.get('$http');
그러면 다른 캐시와 마찬가지로 제어할 수 있습니다.$cacheFactory, 사용 인스턴스는 다음과 같습니다.
$httpDefaultCache.remove(key);
// Where key is the relative URL of your resource (eg: /api/user/current/51a9020d91799f1e9b8db12f)
부울 인수를 사용하는 대신cache각자의 특성action$cacheFactory로 작성된 캐시 인스턴스를 전달할 수 있습니다.이것에 의해, 캐시를 클리어 할 수 있습니다.
사용 예:
app.factory('Todos', function($resource, $cacheFactory) {
var cache = $cacheFactory('todo');
return $resource(apiBaseUrl + '/todos/:id', { id: '@id' }, {
'get': { method: 'GET', cache: cache },
'query': { method: 'GET', cache: cache, isArray: true }
});
});
비슷한 것을 찾다가 이 스레드를 발견했는데 $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과 캐시를 적절한 타이밍에 지우는 작업을 피할 수 있습니다.
이 이야기의 교훈은 도서관과 함께 일하는 것이고 모든 것이 잘 될 것이라고 생각합니다.단, 버그나 불완전한 기능은 제외하고, Angular에는 이러한 기능이 없습니다.
p.s. 이것은 모두 AngularJS 1.2.0에서 실행됩니다.
언급URL : https://stackoverflow.com/questions/17059569/how-to-refresh-invalidate-resource-cache-in-angularjs
'programing' 카테고리의 다른 글
| "not null"과 "not null enable" 사이에는 차이가 있습니까? (0) | 2023.03.25 |
|---|---|
| JavaScript만으로 WordPress 플러그인을 만들 수 있습니까? (0) | 2023.03.25 |
| MongoDB에 있는 모든 컬렉션을 내보내려면 어떻게 해야 합니까? (0) | 2023.03.25 |
| 스프링 MVC + JSON = 406 사용 불가 (0) | 2023.03.06 |
| 일치하는 콩이 두 개 이상 발견될 때 스프링은 어떻게 이름으로 자동 배선됩니까? (0) | 2023.03.06 |