如何覆盖Angular的数字过滤器?

时间:2016-03-18 12:35:57

标签: javascript angularjs angular-filters

我想让Angular的数字过滤器具有一个相同的格式,无论选择的本地化如何。

所以,从Angular source in GitHub我看到过滤器的实现如下所示:

function numberFilter($locale) {
   var formats = $locale.NUMBER_FORMATS;
   return function(number, fractionSize) {

       // if null or undefined pass it through
       return (number == null)
           ? number
           : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
                   fractionSize);
    };
}

我希望我的数字看起来像这样:123 456.78。意思,

formats.GROUP_SEP = " "; // Always, disrespect locale
formats.DECIMAL_SEP = "."; // Always, disrespect locale

我看到this post有关覆盖现有过滤器的问题,但我无法弄清楚如何在我的案例中使用它来实现我想要的目标。

2 个答案:

答案 0 :(得分:7)

您可以覆盖$ locale以使用您自己的值,如下所示:

var app = angular.module("test", []);

app.run(["$locale", function ($locale) {
    $locale.NUMBER_FORMATS.GROUP_SEP = " ";
    $locale.NUMBER_FORMATS.DECIMAL_SEP = ".";
}]);

Plnkr链接:https://plnkr.co/edit/DlacehjcZrFRmWNFs1qZ?p=preview

答案 1 :(得分:0)

您可以这样覆盖它:

myApp.config(['$provide', function($provide) {
   $provide.decorator('numberFilter', ['$delegate', function($delegate) {

       return function(number, fractionSize) {

           // if null or undefined pass it through
           return (number == null)
           ? number
              : formatNumber(number, formats.PATTERNS[0], ' ', '.', fractionSize);
      };
    }
   }])
 }])

另一种方法是设置$ locale.NUMBER_FORMATS以始终拥有您想要的值。