角度触发过滤器在区域设置更改时重新运行

时间:2015-10-21 17:44:50

标签: angularjs angular-filters

我在运行时使用https://github.com/lgalfaso/angular-dynamic-locale更改语言环境。这适用于所有货币符号等,但我希望能够转换货币金额。

我写了一个过滤器:

  angular.module('kitchenapp.filters')
  .filter('convert', ['CURRENCIES', 'tmhDynamicLocale', '_', function (CURRENCIES, tmhDynamicLocale, _) {
    var currentLocale = tmhDynamicLocale.get();
    var currency = _.find(CURRENCIES, {code: currentLocale});
    var conversionRate = currency.rate;
    return function (value) {
      return value * conversionRate;
    };
  }]);

我在html中应用它如此:

<p>{{vm.testAmount | convert | currency:undefined:2 }}</p>

当我更改区域设置时,正如我所说,货币符号会更改但转换过滤器不会运行。如果我将它放在货币过滤器的上游,它将运行,但是然后进行双重处理以去除货币符号和分隔符等。有没有办法避免这种情况并且当区域设置时也可以运行转换过滤器变化?

1 个答案:

答案 0 :(得分:0)

我相信过滤器返回的函数是多次执行的函数,而conversionRate值已经绑定到函数的范围。

试试这个:

angular.module('kitchenapp.filters')
  .filter('convert', ['CURRENCIES', 'tmhDynamicLocale', '_', function (CURRENCIES, tmhDynamicLocale, _) {
        return function (value) {
            var currentLocale = tmhDynamicLocale.get();
            var currency = _.find(CURRENCIES, {code: currentLocale});
            var conversionRate = currency.rate;
            return value * conversionRate;
        };
  }]);