我正在尝试实现一个过滤器,将整数格式的月份转换为月份字符串(例如1到1月)。应使用angular-translate将结果转换为所选语言。 MONTH_X
是我的语言json文件中的标识符。
问题是,$transclate
函数是异步的,我不知道如何从过滤器内的异步函数返回一个值。
这不起作用:
app.filter('monthName', ['$translate', function($translate) {
return function (monthNumber) { //1 = January
var monthNames = [ 'MONTH_1', 'MONTH_2', 'MONTH_3', 'MONTH_4', 'MONTH_5', 'MONTH_6',
'MONTH_7', 'MONTH_8', 'MONTH_9', 'MONTH_10', 'MONTH_11', 'MONTH_12' ];
return $translate(monthNames[monthNumber - 1]).then(function (month) {
return month;
});
}
}]);
有人可以帮忙吗?
答案 0 :(得分:0)
您可以在创建过滤器时创建已翻译月份的列表。过滤器意味着快速,这就是为什么不支持承诺。
示例:
app.filter('monthName', ['$translate', function($translate) {
var monthNames = [ 'MONTH_1', 'MONTH_2', 'MONTH_3', 'MONTH_4', 'MONTH_5', 'MONTH_6',
'MONTH_7', 'MONTH_8', 'MONTH_9', 'MONTH_10', 'MONTH_11', 'MONTH_12' ];
var translatedMonths = [];
monthNames.forEach(function(month) {
$translate(month).then(function (translatedMonth) {
translatedMonths.push(translatedMonth);
});
});
return function (monthNumber) { //1 = January
return translatedMonths[monthNumber - 1];
}
}]);
如果可以,其他选项是使用 $ translate.instant 方法。
示例:
app.filter('monthName', ['$translate', function($translate) {
return function (monthNumber) { //1 = January
var monthNames = [ 'MONTH_1', 'MONTH_2', 'MONTH_3', 'MONTH_4', 'MONTH_5', 'MONTH_6',
'MONTH_7', 'MONTH_8', 'MONTH_9', 'MONTH_10', 'MONTH_11', 'MONTH_12' ];
return $translate.instant(monthNames[monthNumber - 1]);
}
}]);