Angularjs cacheFactory: идентификатор уже занят

Я использую $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);
        }
      }
    })

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

          $window.console.error('Unable to retrieve app language: ' + err);
          deferred.reject(err);
        });
      } else {

         deferred.resolve();
      }
       return deferred.promise;
    };

    return {

      'getLangFile':getLangFile
    };
  }])

При первой загрузке страницы это работает, затем, если я просматриваю, без обновления, авторизацию / вход в систему, я получаю консольную ошибку:

[$cacheFactory: iid] CacheId 'langCache' уже занят!

Похоже (так как я вызываю метод фабрики на каждом маршруте), он не может использовать тот же идентификатор!?

Я на самом деле не знаю, что делать, чтобы исправить это, любая помощь оценена, спасибо.

2 ответа

Решение

Хорошо, благодаря парню в IRC, я исправил эту проблему, мне просто нужно было изменить это:

var getLangFile = function (langCode) {

      var deferred = $q.defer()
        , cache = $cacheFactory('langCache');

в

var cache = $cacheFactory('langCache')
  , getLangFile = function (langCode) {

      var deferred = $q.defer();

Вот что сработало для меня:

cache = $cacheFactory.get('langCache') || $cacheFactory('langCache');
Другие вопросы по тегам