资讯专栏INFORMATION COLUMN

$translatePartialLoader加载失败及解决方式

lbool / 2787人阅读

摘要:按照官网的说法,在中添加模块后必须刷新国际化数据,因此官方建议通过直接调用,或者监听所触发的事件并调用这两种方式来刷新数据。然而按照官网的写法这两者都是无效的。解决方式问题找到了,解决起来也简单,在初始化完毕后强制刷新一次即可,代码如下

前言

$translatePartialLoader(以下简写为TPL)是angular-translate中的局部加载器,由于该加载器可以以模块为单位同时加载多个国际化文件,因此成为angular开发SAP必选的加载器。

问题

事实上,如果按照官网的教程来编写,会出现TPL不生效的情况,具体表现为在config过程中添加模块有效,但是在controller中添加模块无效。
按照官网的说法,在controller中添加模块后必须刷新国际化数据,因此官方建议通过直接调用$translate.refresh(),或者监听addPart所触发的事件并调用refresh这两种方式来刷新数据。然而按照官网的写法这两者都是无效的。

原理分析

国际化数据刷新过程中会根据变量$uses来判断所当前使用的语言,如果当前$uses为空,则放弃这部分操作。而$uses会在translate模块初始化过程中被赋值,因此如果当模块尚未初始化完毕,$uses尚未被赋值时执行刷新是无效的「注:其实不完全无效,这里涉及fallback,不做过多讨论」。
而translate初始化过程中会调用指定的loader获取数据,这个过程是一个异步操作,所以$uses的赋值也要等到异步操作完成后才行,在此期间会出现刷新失效。

解决方式

问题找到了,解决起来也简单,在translate初始化完毕后强制刷新一次即可,代码如下:

var initListener = $rootScope.$on("$translateChangeEnd", function () {
    initListener();
    $translate.refresh();
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79300.html

相关文章

  • angular-translate

    //index.config.js angular .module(app) .config(config); /** @ngInject */ function config($logProvider, $translateProvider, $translatePartialLoaderProvider) { // Enable log $log...

    why_rookie 评论0 收藏0
  • 关于 Overtrue 的拼音库 overtrue/pinyin 为何 travis 为 error

    摘要:官网内测申请方式提供个人企业联系方式及认证信息实名企业营业执照照片或扫描件及申请说明,发送邮件至即可获得内测资格,申请从速。 showImg(https://segmentfault.com/img/bVP7c2?w=1440&h=379); 这是 https://github.com/overtrue/p... 首页 README 中的持续集成状态。 之前有朋友问我,这个 travi...

    ingood 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<