如何将非范围变量传递给AngularJS过滤器?

时间:2014-11-13 21:15:17

标签: javascript angularjs angularjs-filter

我有一系列金额和货币。后者不仅仅是'USD'或'EUR',而是包含该货币格式规则的对象。我已经编写了一个用于格式化数量的过滤器,但只有在我对格式化参数进行硬编码时它才有效:

// arguments: currency symbol, is symbol prefix, decimal symbol, digit group symbol
{{ entry.amount | currency24: '$',true,'.',',' } //USD example
{{ entry.amount | currency24: '€',false,'.',',' } //EUR example

我希望能够将整个对象放在那里:

{{entry.amount | currency24: entry.currency }} // currency object holds all the formatting parameters, but I could just as well pass them one by one

我怎样才能做到这一点?

编辑:entry不是$ scope的一部分。它来自ng-repeat:

ng-repeat="entry in entries"

这就是为什么我在将它传递给过滤器时遇到问题。

1 个答案:

答案 0 :(得分:1)

您可以像上面提到的那样将任何对象传递给过滤器。

HTML标记保持不变:

<p ng-repeat="entry in entries">
  {{entry.amount | currency24: entry.currency }}
</p>

以下代码执行您的要求:

.controller('DemoController', function($scope) {
    $scope.entries = [{
      amount: 35,
      currency: {
        symbol: '$'
      }
    }, {
      amount: 40,
      currency: {
        symbol: '€'
      }
    }];
})

.filter('currency24', function() {
  return function(amount, currencyObject) {
    return amount + currencyObject.symbol;
  };
});

并查看此plunker