我正在使用 angular-translate-loader-partial 遇到竞争情况。
首先,我使用 更改加载程序的状态$translatePartialLoader.addPart(partname)
,这需要随后更新表。详见 API
接下来,我打电话给$translate(translateKey)
. 这开始了一场比赛。它可能会或可能不会显示翻译,具体取决于语言文件是否已加载。
在我使用 $translate 之前,如何确保我的部分文件已全部加载?
我正在使用 angular-translate-loader-partial 遇到竞争情况。
首先,我使用 更改加载程序的状态$translatePartialLoader.addPart(partname)
,这需要随后更新表。详见 API
接下来,我打电话给$translate(translateKey)
. 这开始了一场比赛。它可能会或可能不会显示翻译,具体取决于语言文件是否已加载。
在我使用 $translate 之前,如何确保我的部分文件已全部加载?
一种选择是挂钩 $translatePartialLoaderStructureChanged 事件。只有在零件可用时才会触发。
为确保该部件可用:
$rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
if (Part_Name === 'PartThatYouNeed') {
$translate.refresh().then(function () {
$translate(translateKey);
});
}
});
或者如果要在整个应用程序中使用它可能是一个更好的选择,您可以挂钩此事件并在应用程序运行命令中调用刷新函数,如下所示
app.run(function ($state, $rootScope, $translate) {
$rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
$translate.refresh();
});
});
如果您需要在语言表可访问后运行设置代码,我建议在刷新完成后发出 rootScope:
app.run(function ($state, $rootScope, $translate) {
$rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
$translate.refresh().then(function () {
$rootScope.$emit('ApplicationTranslationsRefreshed', Part_Name);
});
});
});
在您的应用程序中的任何位置之后,您可以挂钩 ApplicationTranslationsRefreshed 事件以了解 $translate('key_that_is_in_the_new_part') 何时可用:
$rootScope.$on('ApplicationTranslationsRefreshed', function (e, Part_Name) {
console.debug(Part_Name + "is now avaialable")
});