首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度平移竞态条件

角度平移竞态条件
EN

Stack Overflow用户
提问于 2014-07-03 23:40:05
回答 1查看 635关注 0票数 1

我在使用angular-translate-loader-partial时遇到了竞争条件。

首先,我使用$translatePartialLoader.addPart(partname)更改加载器的状态,这需要对表进行更新。See API for details

接下来,我调用$translate(translateKey)。这就开始了一场比赛。它可能会显示翻译,也可能不显示,这取决于语言文件是否已加载。

如何确保在使用$translate之前加载了所有的局部文件?

EN

回答 1

Stack Overflow用户

发布于 2015-05-05 16:40:56

一种选择是挂接$translatePartialLoaderStructureChanged事件。这将仅在部件可用时触发。

要确保部件可用,请执行以下操作:

代码语言:javascript
复制
        $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
            if (Part_Name === 'PartThatYouNeed') {
                $translate.refresh().then(function () {
                    $translate(translateKey);
                });
            }
        });

或者,如果要在整个应用程序中使用它,则可能是一个更好的选择,您可以挂接此事件并调用应用程序运行命令中的刷新函数,如下所示

代码语言:javascript
复制
app.run(function ($state, $rootScope, $translate) {
        $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
            $translate.refresh();
        });
});

如果您需要在language表可访问之后运行设置代码,我建议您在刷新完成后发出rootScope:

代码语言:javascript
复制
app.run(function ($state, $rootScope, $translate) {
    $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
        $translate.refresh().then(function () {
            $rootScope.$emit('ApplicationTranslationsRefreshed', Part_Name);
        });
    });
});

在此之后,您可以在应用程序中的任何位置连接ApplicationTranslationsRefreshed事件,以了解$translate('key_that_is_in_the_new_part')何时可用:

代码语言:javascript
复制
        $rootScope.$on('ApplicationTranslationsRefreshed', function (e, Part_Name) {
            console.debug(Part_Name + "is now avaialable")
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档