Angularjs angular.js-在块之间共享cacheFactory数据
我想在Angularjs angular.js-在块之间共享cacheFactory数据,angularjs,caching,Angularjs,Caching,我想在之间共享相同的$cacheFactory。运行块和服务。 我在我的中定义了$cacheFactory。运行块: var cache = $cacheFactory('cacheName'); 把一些东西放进去: cache.put('appData', data); 然后我想检查密钥是否存在于我的一个服务中,但我得到的错误是-CacheId'CacheName'已被获取 以下是服务代码: $scope.cache = $cacheFactory('cacheName'); if (an
之间共享相同的$cacheFactory
。运行块和服务。
我在我的中定义了$cacheFactory
。运行块:
var cache = $cacheFactory('cacheName');
把一些东西放进去:
cache.put('appData', data);
然后我想检查密钥是否存在于我的一个服务中,但我得到的错误是-CacheId'CacheName'已被获取代码>
以下是服务代码:
$scope.cache = $cacheFactory('cacheName');
if (angular.isUndefined($scope.cache.get(key))) {
$log.log($scope.cache.get(key)); //printing th key
}
(function () {
'use strict';
var cacheService = function ($log, $cacheFactory) {
//define cache factory
var cache = $cacheFactory('cacheID');
/*put key-val in cache*/
var _putData = function(key, val){
//check for undefined
if(!angular.isUndefined(key) && !angular.isUndefined(val)){
//key must be a String
if(angular.isString(key)){
cache.put(key, val);
}else{
$log.error('Error in cacheService key must be a String type only!');
}
}else{
$log.error('Error in cacheService key or value are undefined');
}
};
/*get data from cache */
var _getData = function(key){
//check for String type
if(angular.isString(key)){
return cache.get(key);
}else{
$log.error('Error in cacheService key must ne a String type');
}
};
/*Get info */
var _info = function(){
return cache.info();
};
/*Remove data */
var _remove = function(key){
//check for String type
if(angular.isString(key)){
cache.remove(key);
}else{
$log.error('Error in cacheService key must ne a String type');
}
};
/*clear cache*/
var _removeAll = function(){
cache.removeAll();
};
/* PUBLIC API */
var service = {
//model: _model,
put : _putData,
get : _getData,
remove : _remove,
removeAll : _removeAll
};
return service;
};
angular.module('common').service('cacheService', cacheService);
})();
那么,如何共享缓存数据呢?如果没有看到代码的其余部分,很难说。但我下面的例子是有效的
(function(angular) {
'use strict';
angular
.module('cacheExampleApp', [])
.controller('CacheController', ['$scope', '$cacheFactory', 'notify', function($scope, $cacheFactory, notify) {
$scope.cache = $cacheFactory('cacheName');
$scope.cache.put('appData', 'some data');
$scope.callNotify = function() {
notify();
};
}])
.factory('notify', ['$window', '$cacheFactory', function(win, $cacheFactory) {
return function() {
var dataCache = $cacheFactory.get('cacheName');
win.alert(dataCache.get('appData'));
};
}]);
})(window.angular);
示例:因此我使用了一个服务来存储数据,服务代码:
$scope.cache = $cacheFactory('cacheName');
if (angular.isUndefined($scope.cache.get(key))) {
$log.log($scope.cache.get(key)); //printing th key
}
(function () {
'use strict';
var cacheService = function ($log, $cacheFactory) {
//define cache factory
var cache = $cacheFactory('cacheID');
/*put key-val in cache*/
var _putData = function(key, val){
//check for undefined
if(!angular.isUndefined(key) && !angular.isUndefined(val)){
//key must be a String
if(angular.isString(key)){
cache.put(key, val);
}else{
$log.error('Error in cacheService key must be a String type only!');
}
}else{
$log.error('Error in cacheService key or value are undefined');
}
};
/*get data from cache */
var _getData = function(key){
//check for String type
if(angular.isString(key)){
return cache.get(key);
}else{
$log.error('Error in cacheService key must ne a String type');
}
};
/*Get info */
var _info = function(){
return cache.info();
};
/*Remove data */
var _remove = function(key){
//check for String type
if(angular.isString(key)){
cache.remove(key);
}else{
$log.error('Error in cacheService key must ne a String type');
}
};
/*clear cache*/
var _removeAll = function(){
cache.removeAll();
};
/* PUBLIC API */
var service = {
//model: _model,
put : _putData,
get : _getData,
remove : _remove,
removeAll : _removeAll
};
return service;
};
angular.module('common').service('cacheService', cacheService);
})();
然后我只需将其注入任何需要的地方。我应该补充一点,您只能将实例(而不是提供程序)注入到运行块中。您可能希望使用一个配置块(它只接受提供者而不接受实例),这确实是解决这个问题的方法,但我使用的是一个保存数据而不是控制器的服务。