2016-10-25 6 views
1

У меня есть проект с использованием углового перевода с пользовательским загрузчиком.
В принципе, это конфигурация моего провайдера (которая работает отлично).Угловой перевод - когда несколько загрузчиков выполняются только последним

Provider (материал выполнен в конфигурации моего приложения)

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

Everythings это хорошо здесь.


Я должен использовать библиотеку в этом проекте (одна компания, я могу изменить его), и эта библиотека также имеет свой собственный угловую перевести вещи (в основном то же самое).
У этого есть пользовательский загрузчик, инициализированный в конфиг.

Когда мой проект выполнен, я ожидаю, что оба загрузчика сделают свое дело и расширят язык своими ключами.
Это не так.
Выполняется только последний загрузчик (см. Его с журналами).

Итак, как я могу правильно разрешить этот конфликт, пожалуйста?
Есть ли что-то не так с моим способом использования углового перевода?
Спасибо за помощь, ребята.

Редактировать (подробную информацию добавлено)
Я добавил еще называют, как этот в конфигурации с различными «фальшивой» загрузчиком:

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