$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();
});
    原文作者:WoodenSail
    原文地址: https://segmentfault.com/a/1190000005001756
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞