最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Angular js - cache a rootScope param and it's value - Stack Overflow

programmeradmin4浏览0评论

Hey how do i cache for x time this simple object that i set via $http ( $rootScope.config.app_genres)?

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

i just would like to cache it to not repeat everytime the http request

Hey how do i cache for x time this simple object that i set via $http ( $rootScope.config.app_genres)?

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

i just would like to cache it to not repeat everytime the http request

Share Improve this question edited Feb 11, 2014 at 15:23 Filippo oretti asked Feb 9, 2014 at 14:38 Filippo orettiFilippo oretti 49.9k96 gold badges229 silver badges351 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 4

As stated in $http documentation, you can provide your own cache object instance through the cache configuration option.

Here's a $cacheFactory where I override the put method so that the cache gets cleared after TIMEOUT. Note that this only works for one URL. I'll leave making this timer cache object generic as an exercise for you.

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);
    });
  };
}

Here's the fiddle with this working: http://jsfiddle/sirhc/jvLPX/

H i , ( hoping Angular has something built in, that others may add but )

I guess we could assign it to a new variable

$rootScope.dataCache = $rootScope.data;

$rootScope.cacheTimer = 50000; 

Your websites application always reading from $rootScope.dataCache and a routine to check and/or auto update when CacheTimer had elapsed, to recall the server side and re assign.

?

I use this code to cache templates

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

but maybe this one will be more of what you want to do https://coderwall./p/40axlq

You could use cache busting for your requirement. Lets say if you want to cache only for x seconds. The you add a cache busting query parameter with value

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

The request would look like

$http.get(url,{cacheBuster: Math.floor(new Date().getTime() / (x * 1000))},{cache:true})
发布评论

评论列表(0)

  1. 暂无评论