基礎からメモ: Vue.js CH4-p134 フィルタでテキストの変換処理
フィルタでテキストの変換処理ができる。
フィルタはローカルまたはグローバルに登録して使用する。ただしthis
へのアクセスはできない。
フィルタの使い方
Mastache
またはv-bind
の値にパイプ(|
)でつなげて使う。filter
メソッドの第一引数にdata
が渡される。
{{ 対象データ | フィルタ名 }} <div v-bind:id=”対象データ | フィルタ名”> </div>
フィルターはコンポーネントのfilters
オプションに登録することで、特定のコンポーネントの中でのみ使えるようになる。
data.price
の数値を日本円に替えて表示する簡単なフィルターの例。
<div id="app"> <p>{{ price | localNum }}円</p> </div>
var app = new Vue({ el: '#app', data: { price: 19800 }, filters: { localNum: function(val) { return val.toLocaleString(); } } })
グローバルに登録されたフィルタ
グローバルメソッドVue.filter
で登録すると、全てのコンポーネントから使用できるグローバルフィルタになる。
Vue.filter('localNum': function(val) { return val.toLocaleString(); })
フィルタに引数を渡す
<p>{{ message | filterA("Vue") }}</p> <p>{{ message | filterB("Vue", 100) }}</p>
第一引数はフィルター対象のデータ、第二引数以降に()内に書かれた引数が渡される。
filterA: function(message, foo) { console.log(message, foo); // -> Hello! Vue }, filterB: function(message, bar, num) { console.log(message, bar, num); // -> Hello! Vue 100 }
method
オプションに登録したメソッドとの違いは、this
へのアクセスの可不可と、記述方法の違いだけ。ただフィルタを用意することでHTML側の記述がすっきりする。
複数のフィルタをパイプでつなぐ
<p>180度は {{ 180 | radian | round }} ラジアン</p>
round: function(val) { // 小数点以下第2位に丸める return Math.round(val * 100) / 100; }, radian: function(val) { // 度からラジアンに変換する return val * Math.PI / 180; }
[結果表示]
180度は 3.14 ラジアン