2013-04-15 60 views
0

我在Ruby on Rails中使用了AngularJS。我使用自定义符号的货币过滤器。AngularJS过滤器 - Ruby on Rails资产:预编译问题

<span>{{value|currency:'¥'}}<span> 

该过滤器在开发环境中工作正常。

¥1,000.00 

但是,在生产模式下运行时,货币符号将转换为特殊字符。

�1,000.00 

PS:我在所有文件中都使用了UTF-8编码。在production.rb

config.assets.js_compressor = Sprockets::LazyCompressor.new { Uglifier.new(:mangle => false) } 

任何想法如何解决这个问题?谢谢你们

回答

0

我做了一个黑客通过重写货币过滤器,添加.replace(/\uFFFD/g, currencySymbol);

原始代码https://github.com/angular/angular.js/blob/1c1cd4fdf6b6d7511c7b8dc61b8042011dc54830/src/ng/filter/filters.js

currencyFilter.$inject = ['$locale']; 
function currencyFilter($locale) { 
    var formats = $locale.NUMBER_FORMATS; 
    return function(amount, currencySymbol){ 
    if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM; 
    return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2) 
      .replace(/\u00A4/g, currencySymbol); 
    }; 
} 

下面抽出来解决问题最终的代码将如下所示

return formatNumber(amount,currencyFormat , ',', '.', fractionSize). 
     replace(/\u00A4/g, currencySymbol).replace(/\uFFFD/g, currencySymbol);