【问题标题】:AngularJS filter - Ruby on Rails assets:precompile issueAngularJS 过滤器 - Ruby on Rails 资产:预编译问题
【发布时间】:2013-04-15 14:56:47
【问题描述】:

我在 Ruby on Rails 中使用了 AngularJS。我使用了带有自定义符号的货币过滤器。

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

知道如何解决这个问题吗?谢谢各位

【问题讨论】:

    标签: ruby-on-rails filter angularjs


    【解决方案1】:

    在您的production.rb 环境文件中包含这样的内容怎么样? config.assets.precompile += %w( angular.js )

    或者可以使用这个 gem https://github.com/hiravgandhi/angularjs-rails

    【讨论】:

      【解决方案2】:

      我通过覆盖货币过滤器并添加 .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);
      

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 1970-01-01
        • 2013-09-27
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多