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