【问题标题】:angular trigger filter re-run on locale change角度触发过滤器在区域设置更改时重新运行
【发布时间】:2015-10-21 17:44:49
【问题描述】:

我正在使用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>

正如我所说,当我更改语言环境时,货币符号会更改,但不会运行转换过滤器。如果我将它放在货币过滤器的上游,它将运行,但那是双重处理以去除货币符号和分隔符等。有没有办法避免这种情况并在语言环境更改时让转换过滤器也运行?

【问题讨论】:

    标签: angularjs angular-filters


    【解决方案1】:

    我相信过滤器返回的函数是多次执行的函数,并且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;
            };
      }]);
    

    【讨论】:

    • 那是超现实的。我在函数中有一个断点,但从未到达过。当我现在将它放入时,它一直到达并且显然有一些冒泡问题......无论如何,谢谢。这似乎行得通。 :)
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多