我正在尝试使用Jed来翻译角度应用。为此,我使用提供Jed对象的Angular服务。现在,Jed在创建时已经需要存储在JSON文件中的翻译:
app.factory( 'jed', function ( $http ) {
var ret = { jed: null };
$http.get( 'i18n/de_CH/messages.json' )
.success( function ( data ) {
ret.jed = new Jed( data );
} );
return {
get jed() {
// Is null until we receive messages.json
return ret.jed;
}
};
} );
因此,有了Ajax请求,
jed
问题是在HTTP请求返回之前,{{jed.gettext( 'Quit' )}}
没有初始化。
可能的解决方案是返回一个延迟对象,但是由于我们总是要检查延迟对象并使用函数回调,因此使用率很难看,并且内联{{1}}也不再有用。
这样做有干净的方法吗?
答案 0 :(得分:0)
是的,有办法。
成功
return {
get jed()
return ret;
}
};
并注意对象的变化。
这是我的另一个答案中的a demo,显示了这种方法。
另一个选择是始终从异步服务返回promise:
app.factory( 'jed', function ($http) {
return $http.get( 'i18n/de_CH/messages.json')
} );
并在控制器中打开它们:
jed.then(function (data) {
$scope.jed = new Jed(data);
});