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


})();

然后我只需将其注入任何需要的地方。

我应该补充一点,您只能将实例(而不是提供程序)注入到运行块中。您可能希望使用一个配置块(它只接受提供者而不接受实例),这确实是解决这个问题的方法,但我使用的是一个保存数据而不是控制器的服务。