我是角度新手,我需要缓存数据以提高性能。为此,我使用Angular的$cacheFactory。
当我尝试时,
myApp.factory('myCache', function($cacheFactory) {
return $cacheFactory('myData');
});
使用
myApp.controller('MyMain', ['$scope', '$http', 'myCache',
function ($scope, $http, myCache) {
var cache = myCache.get('myData');
if (cache) {
$scope.variable = cache;
}
else {
$http.get('http://www.example.com/path/to/api/endpoint')
.success(function(data) {
$scope.variable = data;
myCache.put('myData', data);
}
);
}
}
这很好用,但它只缓存一组数据,因为我想缓存我使用的多组数据
myApp.factory('myCache', function($cacheFactory) {
return {
get : function(cacheKey){
return $cacheFactory(cachekey);
}
}
});
因此,如果我转到另一个页面,我可以缓存另一组数据,
myApp.controller('MyMain', ['$scope', '$http', 'myCache',
function ($scope, $http, myCache) {
var cache = myCache.get('myData2');
if (cache) {
$scope.variable = cache;
}
else {
$http.get('http://www.example.com/path/to/api/endpoint')
.success(function(data) {
$scope.variable = data;
myCache.put('myData2', data);
}
);
}
}
等
然而,在后一种方式中,虽然它没有给出任何错误,但没有返回数据,也没有进行ajax调用来缓存数据。
我该如何解决这个问题?并使用$ cacheFactory缓存多组数据?
答案 0 :(得分:5)
如果您的URL对于您要查询的数据是唯一的,那么您应该使用$http
内的内置缓存:
$http.get('http://www.example.com/path/to/api/endpoint', { cache: true }).success(...
这将基于cacheProvider
中的URL参数的唯一性为您缓存。