当我列出$ cacheFactory对象时,它有几个方法,但我没有看到实际的键/值缓存.
假设您正在查看$ http缓存,$ cacheFactory($ http)如何获取当前缓存的密钥列表或理想情况下的密钥和值?
所以我们以这种方式从下拉资源模块中的下拉列表中缓存值
var cache = new CacheFactory('DropDownResource', {
maxAge: 3600000,
deleteOnExpire: 'aggressive',
capacity: 5,
storageMode: 'sessionStorage'
});
Run Code Online (Sandbox Code Playgroud)
然后在 $http 回调中,我们以这种方式保存下拉数据
cache.put('dataForDropDown', data);
Run Code Online (Sandbox Code Playgroud)
在其他模块中,我们可以更改用户设置,尤其是更改语言。在此操作之后,我需要清理缓存。因为当用户更改语言并转到带有下拉列表的页面时,他希望看到带有所需语言的下拉列表。
因此,在带有下拉列表的页面上,我们需要再次向服务器发送调用。为此,我们需要在语言更改后清理缓存。
我们怎么做?
我在下拉模块中尝试此代码。
var cache = $cacheFactory('dataForDropDown'); cache.remove('dataForDropDown');
但它不起作用。它说已经创建了名为 dataForDropDown 的缓存。我不明白我做错了什么
我使用$ cacheFactory为应用程序存储语言JSON文件,并且每个新路由运行一个工厂方法,如下所示:
index.js
$routeProvider
.when('/',{
'templateUrl':'views/home/index.html',
'controller':'Home',
'resolve': {
'onEnter': function ($rootScope, langFactory) {
return langFactory.getLangFile($rootScope.lang.appLang);
}
}
})
.when('/auth/login',{
'templateUrl':'views/auth/login.html',
'controller':'AuthLogin',
'resolve': {
'onEnter': function ($rootScope, langFactory) {
return langFactory.getLangFile($rootScope.lang.appLang);
}
}
})
Run Code Online (Sandbox Code Playgroud)
factories.js
.factory('langFactory', ['$rootScope', '$window', '$http', '$cacheFactory', '$q', function ($rootScope, $window, $http, $cacheFactory, $q) {
var getLangFile = function (langCode) {
var deferred = $q.defer()
, cache = $cacheFactory('langCache');
if (!!!cache.get('cache' + $rootScope.lang.appLang)) {
$http.get(langCode + '-langFile-to-be-REMOVED.json').success(function (response) {
cache.put('cache' + $rootScope.lang.appLang, response);
deferred.resolve();
}).error(function (err) { …Run Code Online (Sandbox Code Playgroud)