Angular translate - 当多个加载器只执行最后一个
Posted
技术标签:
【中文标题】Angular translate - 当多个加载器只执行最后一个【英文标题】:Angular translate - When multiple loader it execute only the last one 【发布时间】:2017-03-07 15:31:18 【问题描述】:我有一个项目使用带有自定义加载器的角度翻译。 基本上,这是我的提供程序中的配置(运行良好)。
提供者(在我的应用配置中执行的东西)
$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】:试试这种合并响应的方法。非常适合我。
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;
;
【讨论】:
以上是关于Angular translate - 当多个加载器只执行最后一个的主要内容,如果未能解决你的问题,请参考以下文章