使用ng-options上的过滤器更改显示的值

时间:2013-05-20 07:13:09

标签: angularjs filter ng-options

我想要在0中显示一系列价格(0.991.99<select> ...等)。

我想像这样使用Angular的ng-options

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

如上所示,它会生成00.991.99 ...

的选择

但是我想在代码中使用一个过滤器,这样每次出现'price'这个词时(或类似的东西),代码都会运行一个函数来将浮点数改为字符串和现在(free0.99$1.99$ ...等等。

我有办法做到这一点吗?

由于

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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>

答案 2 :(得分:2)

原谅伪代码

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

app.filter('myFilter', function() {
  return function(displayValue) {
    return (should update displayValue) ? 'newDisplayValue' : displayValue;
});