嘿,我如何将我通过 $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 请求
嘿,我如何将我通过 $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 请求
如$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/
嗨,(希望 Angular 内置了一些东西,其他人可以添加但是)
我想我们可以将它分配给一个新变量
$rootScope.dataCache = $rootScope.data;
$rootScope.cacheTimer = 50000;
您的网站应用程序总是从 $rootScope.dataCache 读取,并在 CacheTimer 过去时检查和/或自动更新,以调用服务器端并重新分配。
?
我使用此代码缓存模板
$http.get(/*URL*/, {cache: $templateCache})
.success(function () { ... })
.error(function () { ... });
但也许这将是你想做的更多 https://coderwall.com/p/40axlq
您可以根据需要使用缓存清除。假设您只想缓存 x 秒。您添加一个带有值的缓存破坏查询参数
Math.floor(new Date().getTime() / (x * 1000))
请求看起来像
$http.get(url,{cacheBuster: Math.floor(new Date().getTime() / (x * 1000))},{cache:true})