programing

Angular에서 $resource 캐시를 새로 고치거나 비활성화하는 방법JS

nicegoodjob 2023. 3. 25. 13:08
반응형

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

반응형