本文同步發表於Andy's Blog
昨天我們將computed、methods()、watch,三個屬性做了一個簡單比較。而今天我們將要介紹另外一個屬性filter
。
目的:主要用在處理格式化文字(如:千分號:$1,000
、英文大小寫轉換等狀況)
綁定方式:使用雙大括號Mustache語法{{}}
或是V-bind表達式
(2.10版本後開始支持)
示範:
1.Mustache語法
{{message | captialize}}
2.v-bind
<div v-bind:id="rawId | formatId"></div>
特性:
1.使用|
,pipe符號可以連結不同filter(數量不限)
2.由左到右執行(順序將影響結果) EX: {{ message | captialize | dollarSign }}
註冊方式:分為區域註冊、全域註冊
範例連結
HTML部分
<div id="app">
<p>{{ price | currency | filterDollarSign }}</p>
</div>
JavaScript部分
var vm = new Vue({
el: '#app',
data: {
price: 199999
},
//轉為千分號
filters:{
currency(price){
return price.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')
/* return price.toLocaleString('en-US'); 寫法二:轉為千分號*/
},
//添加$字號
filterDollarSign(price){
return `$ ${price}`
}
}
})
說明:
區域註冊撰寫注意:filters
限制:僅存在Vue Instance中
轉為千分位公式
參數說明
範例連結
HTML部分
<div id="app">
<p>{{ price | currency | filterDollarSign }}</p>
</div>
JavaScript部分
Vue.filter('currency',function(value){
return value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')
});
Vue.filter('filterDollarSign',function(value){
return `$ ${value}`
});
var vm = new Vue({
el: '#app',
data: {
price: 199999
}
})
範例連結
因為filter是JS函式,所以可以帶入參數喔!
HTML部分
<div id="app">
<p>{{ price | currency | filterDollarSign(priceStr)}}</p>
</div>
JavaScript部分
Vue.filter('currency',function(val){
return val.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')
});
Vue.filter('filterDollarSign',function(value,arg1){
return `${arg1} $ ${value}`
});
var vm = new Vue({
el: '#app',
data: {
price: 199999,
priceStr:'this price is'
}
})
說明:
filterDollarSign中value
對應的是price | currency
回傳的結果,arg1
則對應priceStr:'this price is'
這組字串
1.Vue filter 與 methods 的最大差異在於 filter無法取得實體內的狀態。
2.Filter適用於文字格式處理等簡單的狀況,而複雜的資料處理則適合使用 Computed。