its*_*sme 4 javascript factories 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);
}
}
})
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) {
$window.console.error('Unable to retrieve app language: ' + err);
deferred.reject(err);
});
} else {
deferred.resolve();
}
return deferred.promise;
};
return {
'getLangFile':getLangFile
};
}])
Run Code Online (Sandbox Code Playgroud)
在第一页加载它工作,然后如果我浏览,没有刷新,auth /登录我得到一个控制台错误:
[$ cacheFactory:iid] CacheId'langCache'已经被采用了!
好像(因为我在每条路线上调用工厂方法)它不能使用相同的ID!
我实际上不知道该怎么做才能解决这个问题,任何有用的帮助,谢谢.
小智 9
这对我有用:
cache = $cacheFactory.get('langCache') || $cacheFactory('langCache');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4180 次 |
| 最近记录: |