2013-05-20 3 views
47

<select>に表示したい価格の配列(00.991.99 ...など)があります。私はそれが00.991.99の選択を生成します上に、それが表示されている通りの角のng-optionsこの表示される値を変更するには、ng-optionのフィルタを使用してください。

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

などを使用したい

...

しかし、私は、フィルタを使用したいですの「価格」が表示されるたびに、コードは浮動小数点数を文字列に変換して表示する関数を実行します(free0.99$1.99$ ...など)。

私はそれを行う方法がありますか?

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> 

答えて

111

良い方法があります:

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

すると、次のようなカスタムフィルタを作成したい

おかげ

+0

ありがとう! 構文エラーを除いて、追加しました - 第4行の丸括弧の必要はありません。 答えがうまくいくのに加えて! – TidharPeer

+0

正常にコールされました。エラーを修正しました。 – shawkinaw

+12

わかりやすくするために、 'obj as(obj | price)obj in prices'式にかっこを追加することができます。構文はやや威圧的です。 – RJo

7

thのように使う次のようになります。

このように、フィルタは配列での操作ではなく、単一の値に便利です。オブジェクトと対応する書式設定フィルタがある場合、これは非常に便利です。あなたがそれらを必要とする場合

フィルターはまた、コード内で直接使用することができます。

var formattedPrice = $filter('price')(num); 
2

恩赦擬似コード

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のための' ''(obj.property | myFilter)ですが、説明が鍵です –