2013-05-20 13 views
47

Mam szereg cen (0, 0.99, 1.99 ... itd.), Które chcę wyświetlić w <select>.Użyj filtru dla opcji ng, aby zmienić wyświetlaną wartość.

chcę użyć kątowy na ng-options jak ten

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

Jak jest wyświetlany powyżej wygeneruje wybór 0, 0.99, 1.99 ...

Ale chcę użyć filtra w kod taki, że za każdym razem, gdy pojawi się słowo "ceny" (lub coś w tym stylu), kod uruchomi funkcję zmiany liczby zmiennoprzecinkowej na ciągi i prezentację (free, 0.99$, 1.99$ ... itd.).

Czy mogę to zrobić?

Dzięki

Odpowiedz

111

Jest lepszy sposób:

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

Następnie używaj go jak th jest:

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

W ten sposób filtr jest przydatny dla pojedynczych wartości, a nie działa tylko na tablicach. Jeśli masz obiekty i odpowiadające im filtry formatowania, jest to całkiem przydatne.

Filtry mogą być również stosowane bezpośrednio w kodzie, jeśli ich potrzebują:

var formattedPrice = $filter('price')(num); 
+0

Dzięki! Z wyjątkiem błędu składni, który został dodany - nie ma potrzeby stosowania nawiasów czwartej linii. Poza tym odpowiedź działa świetnie! – TidharPeer

+0

Dobra rozmowa, naprawiono błąd. – shawkinaw

+12

Dla przejrzystości możesz dodać nawiasy do wyrażenia: "obj as (obj | price) for obj in prices'. Składnia jest nieco mniej onieśmielająca. – RJo

7

Chcesz stworzyć własny filtr, takich jak:

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

używać go jak:

<select ng-model="create_price" ng-options="obj for obj in prices | price"> 
    {{ obj }} 
</select> 
2

Pardon kod pseudo

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

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

Proszę spróbować uzupełnij swoją odpowiedź nieco bardziej. Samo opublikowanie bloku kodu bez żadnego wyjaśnienia lub kontekstu nie jest dobre. W obecnym stanie Twoja odpowiedź może nie być przydatna dla osób, które szukają odpowiedzi na to pytanie w przyszłości. –

+0

Dzięki! Tego właśnie szukałem .. '' '(obj.property | myFilter) dla obj w obiektach''' ale tak, wyjaśnienie jest kluczowe –

Powiązane problemy