vue 內(nèi)置過(guò)濾器的使用總結(jié)(附加自定義過(guò)濾器)
前言
vue中過(guò)濾器filters的作用是什么?
過(guò)濾器是一個(gè)通過(guò)輸入數(shù)據(jù),能夠及時(shí)對(duì)數(shù)據(jù)進(jìn)行處理并返回一個(gè)數(shù)據(jù)結(jié)果的簡(jiǎn)單函數(shù)。Vue有很多很便利的過(guò)濾器,可以參考官方文檔。
能夠幫我們處理快速一些數(shù)據(jù)的格式----format數(shù)據(jù)格式化處理。
語(yǔ)法也很簡(jiǎn)單
{{ message | Filter }}
- message: 要格式化的數(shù)據(jù)
- Filter: 對(duì)數(shù)據(jù)格式化的方法
鏈?zhǔn)竭^(guò)濾
VueJs允許你鏈?zhǔn)秸{(diào)用過(guò)濾器,簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)過(guò)濾器的輸出成為下一個(gè)過(guò)濾器的輸入,然后再次過(guò)濾。接下來(lái),我們可以想象一個(gè)比較簡(jiǎn)答的例子,使用了Vue的 filterBy + orderBy 過(guò)濾器來(lái)過(guò)濾所有商品products。過(guò)濾出來(lái)的產(chǎn)品是屬于電器類(lèi)商品,并且按電器字母排序。
filterBy過(guò)濾器 : 過(guò)濾器的值必須是一個(gè)數(shù)組,filterBy + 過(guò)濾條件。過(guò)濾條件是:‘string || function' + in ‘optionKeyName'
orderBy過(guò)濾器 : 過(guò)濾器的值必須是一個(gè)數(shù)組,orderBy + 過(guò)濾條件。過(guò)濾條件是:‘string || array ||function' + ‘order ≥ 0 為升序 || order < 0 為降序'
接下來(lái),我們可以看下第二個(gè)例子:我們有一個(gè)商品數(shù)組products,我們希望遍歷這個(gè)數(shù)組,并把他們打印成一張清單,這個(gè)用v-for很容易實(shí)現(xiàn)。
<li v-for="product in products">
{{ product.name | capitalize }} - {{ product.price | currency }}
</li>
capitalize過(guò)濾器 : 將輸入的字符串首字母轉(zhuǎn)換成大寫(xiě)字母的過(guò)濾器。currency過(guò)濾器 : 將輸入的數(shù)字轉(zhuǎn)換成現(xiàn)金的過(guò)濾器??梢愿县泿欧?hào)(默認(rèn)$)和保留的小數(shù)位(默認(rèn)2)。
利用上面的兩個(gè)過(guò)濾器,能夠很好的把一個(gè)json數(shù)組的商品清單格式化成通熟易懂的商品價(jià)格清單。
如果只想要電器類(lèi)商品,可以在v-for上加過(guò)濾條件:
<li v-for="product in products | filterBy 'electronics' in 'category' ">
{{ product.name | capitalize }} - {{ product.price | currency }}
</li>
上面的例子,就是用filterBy 過(guò)濾在 'category'中含有'electronics' 關(guān)鍵字的列表,返回的列表就是只含有 'electronics' 關(guān)鍵字的列表。
如果想要多個(gè)搜索條件:
<li v-for="product in products | filterBy 'electronics' in 'category' 'name' ">
{{ product.name | capitalize }} - {{ product.price | currency }}
</li>
上面的例子,就是用filterBy 過(guò)濾在 'category' 和 'name' 中含有'electronics' 關(guān)鍵字的列表。
最后我們還需要將這個(gè)列表用字母進(jìn)行排序。我們可以在 filterBy 過(guò)濾器的基礎(chǔ)上,鏈?zhǔn)秸{(diào)用orderBy 過(guò)濾器。
<ul>
<li v-for="product in products
| filterBy 'electronics' in 'category'
| orderBy 'name' "
>
{{ product.name | capitalize }} - {{ product.price | currency }}
</li>
</ul>
orderBy 的排序方式默認(rèn)是升序,如果想要降序,只需要加一個(gè)小于0的參數(shù):
<li v-for="product in products | filterBy 'electronics' in 'category' | orderBy 'name' -1 " >
下面看看vue自帶過(guò)濾器有哪些,并附帶小示例。最后記得看看如果自定義過(guò)濾器哦!
vue自帶的過(guò)濾器
capitalize(首字母大寫(xiě))
<div class="test">
{{message | capitalize}}
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
message: "javan"
}
})
</script>
上面代碼輸出:Javan
uppercase(全部大寫(xiě))
// 初始message:abc
{{message | uppercase}}
// 上面代碼輸出:ABC
lowercase(全部小寫(xiě))
// 初始message:ABC
{{message | lowercase}}
// 上面代碼輸出:abc
currency(輸出金錢(qián)以及小數(shù)點(diǎn))
<div class="test">
{{message | currency}} // 輸出$520.13
{{message | currency '¥' "2"}} //輸出 $520.13
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
message: "520.1314"
}
})
</script>
第一個(gè)參數(shù) {String} [貨幣符號(hào)] - 默認(rèn)值: '$'
第二個(gè)參數(shù) {Number} [小數(shù)位] - 默認(rèn)值: 2
pluralize(變復(fù)數(shù))
如果只有一個(gè)參數(shù),復(fù)數(shù)形式只是簡(jiǎn)單地在末尾添加一個(gè) “s”。如果有多個(gè)參數(shù),參數(shù)被當(dāng)作一個(gè)字符串?dāng)?shù)組,對(duì)應(yīng)一個(gè)、兩個(gè)、三個(gè)…復(fù)數(shù)詞。如果值的個(gè)數(shù)多于參數(shù)的個(gè)數(shù),多出的使用最后一個(gè)參數(shù)。
<div class="test">
{{message}} {{message | pluralize 'item'}} 輸出: 1 item
<ul v-for="item in lili">
<li>
{{item}} {{item | pluralize 'item'}}
輸出: 1 item 2 items 3 items
</li>
</ul>
<ul v-for="item in lili">
<li>
{{item}} {{item | pluralize 'st' 'rd'}}
輸出: 1 st 2 rd 3 rd
</li>
</ul>
<ul v-for="item in man">
<li>
{{item}} {{item | pluralize 'item'}}
輸出: 1 item 2 items 3 items
</li>
</ul>
<ul v-for="item in man">
<li>
{{item}} {{item | pluralize 'st' 'rd'}}
輸出: 1 st 2 rd 3 rd
</li>
</ul>
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
message: 1,
lili: [1,2,3],
man: {
name1: 1,
name2: 2,
name3: 3
}
}
})
</script>
debounce(事件延時(shí))
1) 限制: 需在@里面使用
2) 參數(shù):{Number} [wait] - 默認(rèn)值: 300
3) 功能:包裝處理器,讓它延遲執(zhí)行 x ms, 默認(rèn)延遲 300ms。包裝后的處理器在調(diào)用之后至少將延遲 x ms, 如果在延遲結(jié)束前再次調(diào)用,延遲時(shí)長(zhǎng)重置為 x ms。
<div class="test">
<button id="btn" @click="doSomeThing | debounce 10000">點(diǎn)擊我</button>
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
methods: {
doSomeThing: function () {
// do something
}
}
})
</script>
limitBy(排序)
1) 限制:需在v-for(即數(shù)組)里面使用
第一個(gè)參數(shù):{Number} 取得數(shù)量
第二個(gè)參數(shù):{Number} 偏移量
<div class="test">
<ul v-for="item in lili | limitBy 10">
<li>{{item}}</li>
輸出1 2 3 4 5 6 7 8 9 10
</ul>
<ul v-for="item in lili | limitBy 10 3">
<li>{{item}}</li>
輸出 4 5 6 7 8 9 10 11 12 13
</ul>
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
lili: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
}
})
</script>
filterBy(過(guò)濾)
1) 限制:需在v-for(即數(shù)組)里面使用
第一個(gè)參數(shù): {String | Function} 需要搜索的字符串
第二個(gè)參數(shù): in (可選,指定搜尋位置)
第三個(gè)參數(shù): {String} (可選,數(shù)組格式)
<div class="test">
<ul v-for="item in lili | filterBy 'o' ">
<li>{{item}}</li>
輸出oi oa lo ouo oala
</ul>
<ul v-for="item in man | filterBy 'l' in 'name' ">
<li>{{item.name}}</li>
輸出lily lucy
</ul>
<ul v-for="item in man | filterBy 'l' in 'name' 'dada' ">
<li>{{item.name+"+"+item.dada}}</li>
輸出lily+undefined lucy+undefined undefined+lsh
</ul>
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
lili: ["oi", "oa", "ll", "lo" ,"ouo" ,"kk" ,"oala"],
man: [ //此處注意man是數(shù)組,不是對(duì)象
{name: "lily"},
{name: "lucy"},
{name: "oo"},
{dada: "lsh"},
{dada: "ofg"}
]
}
})
</script>
orderBy(排序)
1) 限制:需在v-for(即數(shù)組)里面使用
第一個(gè)參數(shù): {String | Array | Function} 需要搜索的字符串
第二個(gè)參數(shù): {String} 可選參數(shù) order 決定結(jié)果升序(order >= 0)或降序(order < 0),默認(rèn)是升序
<div class="test">
遍歷數(shù)組
<ul v-for="item in lili | orderBy 'o' 1">
<li>{{item}}</li>
輸出kk ll oi
</ul>
<ul v-for="item in lili | orderBy 'o' -1">
<li>{{item}}</li>
輸出oi ll kk
</ul>
遍歷含對(duì)象的數(shù)組
<ul v-for="item in man | orderBy 'name' 1">
<li>{{item.name}}</li>
輸出Bruce Chuck Jackie
</ul>
<ul v-for="item in man | orderBy 'name' -1">
<li>{{item.name}}</li>
輸出Jackie Chuck Bruce
</ul>
使用函數(shù)排序
<ul v-for="item in man | orderBy ageByTen">
<li>{{item.name}}</li>
輸出Bruce Chuck Jackie
</ul>
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
lili: ["oi", "kk", "ll"],
man: [ //此處注意man是數(shù)組,不是對(duì)象
{
name: 'Jackie',
age: 62
},
{
name: 'Chuck',
age: 76
},
{
name: 'Bruce',
age: 61
}
]
},
methods: {
ageByTen: function () {
return 1;
}
}
})
</script>
自定義過(guò)濾器
<div class="test">
{{'2018-11-16 18:12:15'|formatDate}}
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
methods: {
},
filters:{
formatDate (val) {
return moment(val).format('YYYY-MM-DD');
// 這里用到了moment.js
}
}
})
</script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Vue2.x開(kāi)發(fā)實(shí)現(xiàn)JSON樹(shù)的方法
這篇文章主要給大家介紹了關(guān)于利用Vue2.x開(kāi)發(fā)實(shí)現(xiàn)JSON樹(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Vue3響應(yīng)式高階用法之shallowRef()的使用
在Vue3框架中,shallowRef()為開(kāi)發(fā)者提供了細(xì)粒度的響應(yīng)式控制能力,特別適用于處理深層嵌套對(duì)象或需要部分響應(yīng)式的場(chǎng)景,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2024-09-09
深入淺析golang zap 日志庫(kù)使用(含文件切割、分級(jí)別存儲(chǔ)和全局使用等)
這篇文章主要介紹了golang zap 日志庫(kù)使用(含文件切割、分級(jí)別存儲(chǔ)和全局使用等),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
詳解element-ui中el-select的默認(rèn)選擇項(xiàng)問(wèn)題
這篇文章主要介紹了詳解element-ui中el-select的默認(rèn)選擇項(xiàng)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Vue 頁(yè)面權(quán)限控制和登陸驗(yàn)證功能的實(shí)例代碼
這篇文章主要介紹了Vue 頁(yè)面權(quán)限控制和登陸驗(yàn)證功能的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
在vue中實(shí)現(xiàn)echarts隨窗體變化
這篇文章主要介紹了在vue中實(shí)現(xiàn)echarts隨窗體變化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
element中drawer模板的實(shí)現(xiàn)
本文主要介紹了element中drawer模板的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

