49

我有一系列要显示的价格(0, 0.99, 1.99... 等)<select>

ng-options我想像这样使用Angular

<select ng-model="create_price" ng-options="obj for obj in prices"/>

正如上面显示的那样,它将生成一个选择0, 0.99, 1.99...

但我想在代码中使用一个过滤器,这样每次出现“价格”这个词(或类似的东西)时,代码都会运行一个函数来将浮点数更改为字符串并呈现 ( free, 0.99$, 1.99$... 等)。

我有办法吗?

谢谢

4

3 回答 3

114

有一个更好的方法:

app.filter('price', function() {
  return function(num) {
    return num === 0 ? 'free' : num + '$';
  };
});

然后像这样使用它:

<select ng-model="create_price" ng-options="obj as (obj | price) for obj in prices">
</select>

这样,过滤器对单个值很有用,而不是只对数组进行操作。如果您有对象和相应的格式过滤器,这非常有用。

如果需要,过滤器也可以直接在代码中使用:

var formattedPrice = $filter('price')(num);
于 2013-05-21T16:55:08.967 回答
7

您要创建自定义过滤器,例如:

app.filter('price', function() {
  return function(arr) {
    return arr.map(function(num){
      return num === 0 ? 'free' : num + '$';
    });
  };
});

像这样使用它:

<select ng-model="create_price" ng-options="obj for obj in prices | price">
  {{ obj }}
</select>
于 2013-05-20T08:15:13.800 回答
2

原谅伪代码

data-ng-options="( obj.property | myFilter ) for obj in objects"

app.filter('myFilter', function() {
  return function(displayValue) {
    return (should update displayValue) ? 'newDisplayValue' : displayValue;
});
于 2014-05-14T17:14:32.850 回答