2013-05-20 2 views
47

У меня есть ряд цен (0, 0.99, 1.99 ... и т. Д.), Который я хочу отобразить в <select>.Использовать фильтр на ng-опциях для изменения отображаемого значения

Я хочу использовать Угловое-х ng-options как этот

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

Как отображается выше он будет генерировать выбор 0, 0.99, 1.99 ...

Но я хочу использовать фильтр код, такой, что каждый раз, когда представляется слово «цены» (или что-то в этом роде), код будет запускать функцию для изменения чисел с плавающей запятой на строки и существующие (free, 0.99$, 1.99$ ... и т. Д.).

У меня есть способ сделать это?

Благодаря

ответ

111

Там есть лучший способ:

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); 
+0

Спасибо! За исключением синтаксической ошибки, которую вы добавили - нет необходимости в круглой скобке четвертой строки. Кроме того, ответ работает отлично! – TidharPeer

+0

Хороший вызов, исправлена ​​ошибка. – shawkinaw

+12

Для наглядности вы можете добавить круглые скобки к выражению: 'obj as (obj | price) для obj в ценах'. Синтаксис немного менее устрашающий. – RJo

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

Pardon псевдо код

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

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

Попробуйте отвлеките свой ответ немного больше. Просто размещение кода без каких-либо объяснений или контекста не является хорошим. В текущем состоянии ваш ответ может быть не очень полезен для людей, которые ищут ответ на этот вопрос в будущем. –

+0

Спасибо! Это то, что я искал .. '' '(obj.property | myFilter) для obj в объектах''', но да, объяснение является ключевым –