在rootscope中的函数,无法访问rootscope变量

时间:2017-11-15 13:08:47

标签: angularjs

在我的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());

2 个答案:

答案 0 :(得分:1)

$rootScope上定义的变量不可能具有相同的上下文。

我只能想象一个案例: 它如此早地调用getTourTranslation,因此changeLanguage$translateChangeSuccess处理程序都没有运行

答案 1 :(得分:0)

问题是,$rootScope.language在初始化之前被调用。

因此,我将一个函数调用getTourTranslation()函数,该函数在触发按钮后调用。因此,正确的变量现在只在需要时而不是始终初始化。

所以,我修复了两件事,而且都基于@BotanMan的评论