如何在过滤器函数内返回异步函数调用的值

时间:2015-09-11 13:04:06

标签: angularjs asynchronous angular-translate

我正在尝试实现一个过滤器,将整数格式的月份转换为月份字符串(例如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;
        });
    }
}]);

有人可以帮忙吗?

1 个答案:

答案 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]);
    }
}]);