$translatePartialLoader(如下简写为TPL)是angular-translate中的局部加载器,因为该加载器能够以模块为单位同时加载多个国际化文件,所以成为angular开发SAP必选的加载器。异步
事实上,若是按照官网的教程来编写,会出现TPL不生效的状况,具体表现为在config过程当中添加模块有效,可是在controller中添加模块无效。
按照官网的说法,在controller中添加模块后必须刷新国际化数据,所以官方建议经过直接调用$translate.refresh(),或者监听addPart所触发的事件并调用refresh这两种方式来刷新数据。然而按照官网的写法这二者都是无效的。code
国际化数据刷新过程当中会根据变量$uses来判断所当前使用的语言,若是当前$uses为空,则放弃这部分操做。而$uses会在translate模块初始化过程当中被赋值,所以若是当模块还没有初始化完毕,$uses还没有被赋值时执行刷新是无效的「注:其实不彻底无效,这里涉及fallback,不作过多讨论」。
而translate初始化过程当中会调用指定的loader获取数据,这个过程是一个异步操做,因此$uses的赋值也要等到异步操做完成后才行,在此期间会出现刷新失效。教程
问题找到了,解决起来也简单,在translate初始化完毕后强制刷新一次便可,代码以下:事件
var initListener = $rootScope.$on('$translateChangeEnd', function () { initListener(); $translate.refresh(); });