我在使用$http.get
内设置的值时遇到问题。由于它是异步的,所以当promise没有返回时我无法访问该值。有没有办法调用函数,检查是否已经定义了所需的值,如果没有,请等待,否则继续使用该函数?
我试图使用$ q.all但是我没有一系列的承诺,我只有1个承诺和一个在返回承诺之前被调用的函数但是需要promises结果。我不能在promise之后使用then()
,因为我想多次调用该函数,而promise只在启动时调用。以下是我的html,app.js以及出现问题的服务的基本概述:
HTML:
<div data-tool="contactForm" data-language="english">
<h1>{{'heading' | translate }}</h1>
</div>
app.js:
mainApp.directive('tool', ['translationService', function (translationService) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
//load current translation files with the giver paramters
translationService.loadDefaultTranslation(attrs.language);
}
}
}]);
mainApp.filter('translate', function (translationService) {
'use strict';
return function (input) {
//translate the given input
return translationService.doTranslation(input);
};
});
translationService.js:
//Called once on startup
var translation;
var loadDefaultTranslation = function (language) {
$http.get(language + '.json').success(function (data) {
translation = data;
});
}
//This is called multiple times from within a filter
var doTranslation = function(input)
{
return translation[input];
}
答案 0 :(得分:1)
您可以在函数doTranslation中添加条件。 并且在翻译未设置时返回输入。
如果您使用的是angular-ui-router,则可以使用i18n模块,如ngBabelfish