5

嘿,我如何将我通过 $http ($rootScope.config.app_genres) 设置的这个简单对象缓存 x 次?

 $http.get($rootScope.config.app_ws+'get/genres',{},{cache:true}).success(function(response) {
    $rootScope.config.app_genres =  response;
  });

我只是想缓存它以不重复每次 http 请求

4

4 回答 4

4

$http 文档中所述,您可以通过缓存配置选项提供自己的缓存对象实例。

这是$cacheFactory我覆盖该put方法的地方,以便在TIMEOUT. 请注意,这只适用于一个 URL。我将把这个计时器缓存对象作为通用练习留给你。

function Ctrl($scope, $http, $cacheFactory, $timeout) {
  var timedCache = $cacheFactory('myCache'),
      TIMEOUT = 5000,
      cacheTimer = null;

  timedCache._put = timedCache.put;
  timedCache.put = function (key, val) {
    console.log('caching', key);

    $timeout.cancel(cacheTimer);
    cacheTimer = $timeout(function () {
      console.log('clearing cache for', key);
      timedCache.remove(key);
    }, TIMEOUT, false);

    timedCache._put(key, val);
  };

  $scope.request = function () {
    $http.get('/echo/json', {
      cache: timedCache
    })
    .success(function (data) {
      console.log('received', data);
    });
  };
}

这是这个工作的小提琴:http: //jsfiddle.net/sirhc/jvLPX/

于 2014-02-18T01:32:03.113 回答
4

嗨,(希望 Angular 内置了一些东西,其他人可以添加但是)

我想我们可以将它分配给一个新变量

$rootScope.dataCache = $rootScope.data;

$rootScope.cacheTimer = 50000; 

您的网站应用程序总是从 $rootScope.dataCache 读取,并在 CacheTimer 过去时检查和/或自动更新,以调用服务器端并重新分配。

?

于 2014-02-09T14:46:32.147 回答
3

我使用此代码缓存模板

$http.get(/*URL*/, {cache: $templateCache})
    .success(function () { ... })
    .error(function () { ... });

但也许这将是你想做的更多 https://coderwall.com/p/40axlq

于 2014-02-11T15:55:43.610 回答
3

您可以根据需要使用缓存清除。假设您只想缓存 x 秒。您添加一个带有值的缓存破坏查询参数

Math.floor(new Date().getTime() / (x * 1000))

请求看起来像

$http.get(url,{cacheBuster: Math.floor(new Date().getTime() / (x * 1000))},{cache:true})
于 2014-02-11T18:58:37.257 回答