2016-05-03 17 views
0

私はキャッシュ内のデータを保存するために$ cacheFactoryを使用していますが、今日までMyFactory.jsという1つのクラスにcacheFactoryを分けることにしました。今、私はエラーを取得しています:AngularJS - この工場注入で何か不足していますか?

TypeError: tableCacheFactory is not a function 

それは簡単な方法か何かのように、注射を取っているので、私はここで何かが欠けていた場合誰もが知っているのですか?

main.js

angular.module('main-component', 
    ['my-component', 
    'my-cache-factory' 
    ]); 

MyFactory.js

angular.module('my-cache-factory', []) 

    .factory('tableCacheFactory', [ 
     '$cacheFactory', function ($cacheFactory) { 
      return $cacheFactory('my-cache'); 
     } 
    ]); 

MyService.js

angular.module('my-component', []) 

    .factory('my-component-service', 
     ['$rootScope', 
     '$http', 
     '$q', 
     'tableCacheFactory', 
     function ($rootScope, $http, $q, tableCacheFactory) { 

      function getMyData (prodNro) { 

       var deferred = $q.defer(); 
       var promise = deferred.promise; 

       var dataCache = tableCacheFactory.get('tablecache'); 

       if (!dataCache) { 
        dataCache = tableCacheFactory('tablecache'); // TypeError: tableCacheFactory is not a function 
       } 

       var summaryFromCache = dataCache.get('tablecache' + prodNro); 

       if (summaryFromCache) { 
        deferred.resolve(summaryFromCache); 

       } else { 

        $http({ 
         method: ... 
         data : ... 
         url: ... 
        }).success(function (data, status, headers, config) { 

         var objectResult = { 
          "data": data, 
          "status": status, 
          "headers": headers, 
          "config": config 
         } 

         if (data.response) { 
          // Save to cache 
          dataCache.put('tablecache'+prodNro, objectResult); 
         } 

         deferred.resolve(objectResult); 

        }).error(function (data, status, headers, config) { 

         ... 
        }); 

       } 

       return promise; 

      } 

答えて

0

あなたはどのように$cacheFactory作品に関するいくつかの誤解があるようです。それは別のCacheオブジェクトを含む初期化されたCacheオブジェクトだったよう

var dataCache = tableCacheFactory.get('tablecache');では、あなたはそれを使用しています。それは自分自身$cacheFactoryだったように一方dataCache = tableCacheFactory('tablecache');

はそれを使用しています。

そして、両方とも、私が既にtableCacheであるべきであると思われるものでレコード 'tablecache'にアクセスしようとします。

エラーはまさにそれが言うことです。 As per the docs$cacheFactory('my-cache');を呼び出しても、キャッシュをさらに作成する関数は返されません。 put(key, value)get(key)のようなメソッドを持つ$cacheFactory.Cacheオブジェクトを返します。それらを代わりに使用してください。

私は、キャッシング(工場の名称が変更されていることに注意してください)の全体構造を変更したい:

.factory('tableCache', [ 
    '$cacheFactory', function ($cacheFactory) { 
     //Return what the name of the factory implies 
     return $cacheFactory('tablecache'); 
    } 
]); 

をそしてより多くの奇妙な「tablecache」を実行することなく、

を名前空間をすることを使用します
function getMyData (prodNro) { 
    ... 
    var summaryFromCache = tableCache.get(prodNro); 
    ... 
    tableCache.put(prodNro, objectResult); 
} 
0

tableCacheFactorymy-cache-factoryモジュール内にラップされました。したがって、モジュールを使用する前にまずmy-componentモジュールに注入する必要があります。だから、このようにする必要があります:あなたは私のモジュールキャッシュ・工場であなたのキャッシュファクトリを定義したが、その後、あなたの主なコンポーネントのサービスモジュールにそのモジュールを注射したことがない

angular.module('my-component', ['my-cache-factory']) 
+0

上記の回答の編集に関する質問とコメントをご覧ください。 – RicardoGonzales

0

。代わりにangular.module('my-component', ['my-cache-factory'])を実行してください。

+0

私はそうは思わない、私の編集の質問を参照してください。しかし、そうであれば、エラーの上の行も失敗するでしょうが、そうではありません – RicardoGonzales

関連する問題