$translatePartialLoader加载失败及解决方式

发布时间:2019-07-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了$translatePartialLoader加载失败及解决方式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

$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();
});

脚本宝典总结

以上是脚本宝典为你收集整理的$translatePartialLoader加载失败及解决方式全部内容,希望文章能够帮你解决$translatePartialLoader加载失败及解决方式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。