2015-09-11 31 views
0

我试图实现一个过滤器,将整数格式的月份转换为月份字符串(例如1到1月份)。结果应该使用角度平移翻译成选定的语言。 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

你知道,'$ translate.instant'存在......! – deceze

+0

@丹尼斯你可以显示错误吗? –

+0

我不会收到任何错误。该过滤器只返回一个空字符串。如果我在$ traslate.then(..)回调函数a中添加警报(月),请参阅正确的已翻译月份字符串。 –

回答

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