我正在使用AngularJS並創建了一個模塊,其中包含一個工廠和一個過濾器。 Factory獲得本地json文件翻譯),並且過濾器提供了一個返回文本翻譯版本的函數。所以代碼如下所示:
angular
.module('i18n', [])
.factory('translationDataFact', ['$http', function($http){
var t = {};
var user = {};
t.defaultLanguage = 'en-GB';
t.languageFile = null;
t.init = function(){
t.setLanguage();
if(!t.languageFile){
$http
.get('translations/' + t.defaultLanguage + '.json')
.success(function(data){
t.languageFile = data.strings;
})
.error(function(error){
console.log(error);
});
}
}
t.setLanguage = function(){
/* change default language to User language here */
if(user.id){
t.defaultLanguage = user.language;
}
return t.defaultLanguage;
}
t.init();
return t.languageFile;
}])
.filter('t', ['translationDataFact', function (translationDataFact) {
var translate = function (stringIdenitfier) {
var translation = translationDataFact.languageFile[stringIdenitfier];
if(translation){
return translation;
}
return "translate me!!";
};
return translate(stringIdenitfier);
}]);
然後我想使用的過濾器來翻譯變量的名字,像這樣
{{"string" | t }}
我遇到的問題是,我不知道如何確保
- 的工廠的返回在過濾器運行之前設置。
- 此外,我很困惑我如何防止整個應用程序呈現,直到這個過濾器準備好了?
任何幫助將是驚人的,因爲我失去了:(
我想你的意思是'返回t;'在工廠結束時。 – 2014-10-29 17:26:38
我不認爲我需要所有的t,我只是返回t.languageFile。 – 2014-10-29 17:38:12
然後你返回的只是'null'。即使回調已經改變了't.languageFile'的值,返回值仍然是'null'。你正在返回一個*值*,而不是一個變量/引用。 – 2014-10-29 17:41:30