2016-10-25 29 views
1

我有一個項目使用角度翻譯與自定義加載器。
基本上,這是我的提供商(這是完美的工作)的配置。角度翻譯 - 當多個加載器只執行最後一個時

提供商(在我的應用程序的配置執行的東西)

$translateProvider.useSanitizeValueStrategy('sanitize'); 
$translateProvider.useLoader('componentsTranslationLoader'); 
$translateProvider.preferredLanguage($language); 

正如你所看到的,我用我自己的componentsTranslationLoader。它按預期做到了這一點。

廠(componentsTranslationLoader)

return function(options) { 
     var deferred  = $q.defer(); 
     var translations = {}; 

     $http.get('languages/components/' + options.key + '.json').success(function(keys) { 
      translations = keys; 
      deferred.resolve(translations); 
     }); 
     return deferred.promise; 
}; 

萬物是好的從這裏開始。


我在這個項目(公司的一個,我可以編輯)使用一個庫,該庫在也有他自己的角度轉換的東西(基本上是一回事)。
它有一個自定義加載器,初始化到配置中。

當我的項目執行時,我希望這兩個裝載程序都做他們的東西,並用他們的密鑰擴展語言。
它沒有。
只有最後一個加載器被執行(見日誌)。

那麼,我該如何正確解決這個衝突呢?
我的角度翻譯方式有什麼問題嗎?
感謝您的幫助球員。

編輯(增加了更多的信息)
我增加了更多的這樣調用一個與不同的「假」裝載機的配置:

$translateProvider.useLoader('aFakeLoaderWithLogs'); 

,但問題仍然是相同的,只有最後一個成該配置被調用。
我搜索了具有類似問題的主題,甚至在文檔中也沒有發現任何內容。

+1

我應該開始賞金嗎? :-) – C0ZEN

+0

我解決了你的問題。請檢查我的回答,並且您可以將其標記爲正確。 – user321

回答

0

試試這種合併響應的方法。對我很好。

function customLoader($http, $q, localeUrl, errorCodeUrl) { 

    return function (options) { 
     var deferred = $q.defer(); 
     var translations = []; 

     $q.all([ 
      $http.get(localeUrl + "locale-" + options.key +".json"), 
      $http.get(errorCodeUrl + "?lang=cs") 
     ]).then(function(response, status) { 
      translations.push(response[0].data); 
      translations.push(response[1].data); 
      console.log(translations); 
      deferred.resolve(translations); 
      return translations; 
     }); 

     return deferred.promise; 
    }; 
} 
相關問題