HTTP请求的自定义缓存

时间:2017-03-16 08:51:10

标签: angularjs http caching

我想缓存回复[即解析了HTTP请求的JSON响应,而不是响应本身。我的数据很大且经过了解压缩,所以实际上有一个公平的性能命令解压缩,因此希望存储原始数据。

目前我正在使用HTTP拦截器进行缓存和TimeToLive机制described here以及AngularJS'内置于this.Detail = ViewModel.ChangeMasterItem(seleteditem);

那么我怎样才能使用截取器停止HTTP请求并返回我自己的响应。请注意,我仍然计划使用$cacheFactory,我只管理自己的数据。

$cacheFactory

2 个答案:

答案 0 :(得分:1)

我会考虑将此注入您的服务并使您的工厂只处理已接收/缓存的数据。这次我只为你创建了一个包含HTTP / Cache切换逻辑的服务。我认为您将能够创建一个工厂来自行处理您的数据/状态。

.service('getService', ['$cacheFactory', '$http', '$q', function($cacheFactory, $http, $q) {
    return {
        request: function() {
            function getData () {
                var deferred  = $q.defer();
                if (angular.isUndefined($cacheFactory.get('getServiceData'))) {
                    $http({
                        'method': 'GET',
                        'url': 'someUrl'
                    }).then(function (result) {
                        $cacheFactory.put('getServiceData', result.data);
                        deferred.resolve(result.data);
                    });
                } else {
                    deferred.resolve($cacheFactory.get('getServiceData'));
                }
            }

            return getData();
        },
        flush: function () {
            $cacheFactory.remove('getServiceData');
        },
        refresh: function () {
            this.flush();
            return this.refresh();
        }
    };
}]);

答案 1 :(得分:0)

{cache: true}添加到请求选项就足够了。

请参见here

$http.get('some/url', {cache: true})
.then( ({data}) => data)