在我的app.run中,我有一个函数可以从其他文件的全局变量中获取一些文本。在该变量中,有一些带有语言属性的关键字,这使我只能获取所请求的文本并过滤出正确的语言。
我为此创建了一个函数,但我无法访问该函数中的$rootScope.language
变量,这是获取正确文本所需的。
function getTourTranslation(key){
console.log("getTourTranslation", key);
var lang = $rootScope.language;
var step = _.get(steps, key);
return step[lang]
}
所以语言是未定义的,因此$rootScope.language
是,但变量存在并包含网站上当前语言的正确语言键。如何在不将语言作为变量传递给函数的情况下获取该变量的内容?
我也试过$rootScope.getTourTranslation = function(key)
但没有运气
这是语言变量的填充方式。我们使用angular-translate,因此这是$ translate服务。此代码位于getTourTranslation
函数上方。
$rootScope.changeLanguage = function (langKey) {
if(langKey){
if(langKey.length == 2) {
$translate.use(langKey.toLowerCase()+"_"+langKey.toUpperCase());
$rootScope.language = langKey;
} else if(langKey.length == 5) {
$translate.use(langKey);
$rootScope.language = langKey.substring(0,2);
}
}
};
$rootScope.$on('$translateChangeSuccess', function () {
if($translate.use()){
$rootScope.language = $translate.use().substring(0,2);
if($state.$current && !$state.$current.self.abstract) {
$state.reload();
}
}
});
$rootScope.changeLanguage($translate.use());
答案 0 :(得分:1)
$rootScope
上定义的变量不可能具有相同的上下文。
我只能想象一个案例:
它如此早地调用getTourTranslation
,因此changeLanguage
或$translateChangeSuccess
处理程序都没有运行
答案 1 :(得分:0)
问题是,$rootScope.language
在初始化之前被调用。
因此,我将一个函数调用getTourTranslation()
函数,该函数在触发按钮后调用。因此,正确的变量现在只在需要时而不是始终初始化。
所以,我修复了两件事,而且都基于@BotanMan的评论