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