我有以下功能:
app.factory('$translation', ['$http', function($http) {
var getTranslation = function(locale) {
$http.get("/translations/" + locale + ".json").success(function(data) {
translations = data;
});
};
getTranslation('en-US');
var translate = function(input) {
console.log(translations);
if(!(input in translations))
return input;
var translation = translations[input];
return translation != null ? translation : input;
};
return {
translate: translate,
getTranslation: getTranslation
};
}]);
app.filter('translate', ['$translation', function($translation) {
return function(input) {
return $translation.translate(input);
}
}]);
使用此函数,translation
变量在启动时为空,这是有意义的,因为它是异步的。然后,如果我在角度应用程序中导航,我会得到翻译,因为变量不再是空的。
有没有办法,我可以以某种方式使请求同步,或至少模拟同步请求;那么,变量是否存在于翻译函数中?
编辑:复制粘贴错误。现在添加了回报。
答案 0 :(得分:0)
看起来您的$translate
工厂需要返回一个/一些方法函数。
angular.factory('$translation', ['$http', function($http) {
var translations = {};
var methods = {
translate : translate,
getTranslation : getTranslation //Not sure if you wanted this as a private function or not...
};
return methods;
function getTranslation(locale) {
$http.get("/translations/" + locale + ".json").success(function(data) {
translations = data;
});
};
getTranslation('en-US');
function translate(input) {
console.log(translations);
if(!(input in translations))
return input;
var translation = translations[input];
return translation != null ? translation : input;
};
}])
建议: Don't Use $
when naming...well anything not related to the main AngularJS library.