摘要:按照官網(wǎng)的說法,在中添加模塊后必須刷新國際化數(shù)據(jù),因此官方建議通過直接調(diào)用,或者監(jiān)聽所觸發(fā)的事件并調(diào)用這兩種方式來刷新數(shù)據(jù)。然而按照官網(wǎng)的寫法這兩者都是無效的。解決方式問題找到了,解決起來也簡單,在初始化完畢后強制刷新一次即可,代碼如下
前言
$translatePartialLoader(以下簡寫為TPL)是angular-translate中的局部加載器,由于該加載器可以以模塊為單位同時加載多個國際化文件,因此成為angular開發(fā)SAP必選的加載器。
問題事實上,如果按照官網(wǎng)的教程來編寫,會出現(xiàn)TPL不生效的情況,具體表現(xiàn)為在config過程中添加模塊有效,但是在controller中添加模塊無效。
按照官網(wǎng)的說法,在controller中添加模塊后必須刷新國際化數(shù)據(jù),因此官方建議通過直接調(diào)用$translate.refresh(),或者監(jiān)聽addPart所觸發(fā)的事件并調(diào)用refresh這兩種方式來刷新數(shù)據(jù)。然而按照官網(wǎng)的寫法這兩者都是無效的。
國際化數(shù)據(jù)刷新過程中會根據(jù)變量$uses來判斷所當(dāng)前使用的語言,如果當(dāng)前$uses為空,則放棄這部分操作。而$uses會在translate模塊初始化過程中被賦值,因此如果當(dāng)模塊尚未初始化完畢,$uses尚未被賦值時執(zhí)行刷新是無效的「注:其實不完全無效,這里涉及fallback,不做過多討論」。
而translate初始化過程中會調(diào)用指定的loader獲取數(shù)據(jù),這個過程是一個異步操作,所以$uses的賦值也要等到異步操作完成后才行,在此期間會出現(xiàn)刷新失效。
問題找到了,解決起來也簡單,在translate初始化完畢后強制刷新一次即可,代碼如下:
var initListener = $rootScope.$on("$translateChangeEnd", function () { initListener(); $translate.refresh(); });
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79300.html
//index.config.js angular .module(app) .config(config); /** @ngInject */ function config($logProvider, $translateProvider, $translatePartialLoaderProvider) { // Enable log $log...
摘要:官網(wǎng)內(nèi)測申請方式提供個人企業(yè)聯(lián)系方式及認(rèn)證信息實名企業(yè)營業(yè)執(zhí)照照片或掃描件及申請說明,發(fā)送郵件至即可獲得內(nèi)測資格,申請從速。 showImg(https://segmentfault.com/img/bVP7c2?w=1440&h=379); 這是 https://github.com/overtrue/p... 首頁 README 中的持續(xù)集成狀態(tài)。 之前有朋友問我,這個 travi...
閱讀 3704·2021-11-12 10:36
閱讀 3842·2021-09-22 15:48
閱讀 3551·2019-08-30 15:54
閱讀 2606·2019-08-29 16:44
閱讀 2374·2019-08-29 16:08
閱讀 2420·2019-08-29 16:06
閱讀 1294·2019-08-29 15:21
閱讀 3179·2019-08-29 12:39