2015-09-11 57 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]); 
    } 
}]);