您好,登錄后才能下訂單哦!
小編給大家分享一下vue中內置過濾器怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言
vue中過濾器filters的作用是什么?
過濾器是一個通過輸入數據,能夠及時對數據進行處理并返回一個數據結果的簡單函數。Vue有很多很便利的過濾器,可以參考官方文檔。
能夠幫我們處理快速一些數據的格式----format數據格式化處理。
語法也很簡單
{{ message | Filter }}
message: 要格式化的數據
Filter: 對數據格式化的方法
鏈式過濾
VueJs允許你鏈式調用過濾器,簡單的來說,就是一個過濾器的輸出成為下一個過濾器的輸入,然后再次過濾。接下來,我們可以想象一個比較簡答的例子,使用了Vue的 filterBy + orderBy 過濾器來過濾所有商品products。過濾出來的產品是屬于電器類商品,并且按電器字母排序。
filterBy過濾器 : 過濾器的值必須是一個數組,filterBy + 過濾條件。過濾條件是:‘string || function' + in ‘optionKeyName'
orderBy過濾器 : 過濾器的值必須是一個數組,orderBy + 過濾條件。過濾條件是:‘string || array ||function' + ‘order ≥ 0 為升序 || order < 0 為降序'
接下來,我們可以看下第二個例子:我們有一個商品數組products,我們希望遍歷這個數組,并把他們打印成一張清單,這個用v-for很容易實現。
<li v-for="product in products"> {{ product.name | capitalize }} - {{ product.price | currency }} </li>
capitalize過濾器 : 將輸入的字符串首字母轉換成大寫字母的過濾器。currency過濾器 : 將輸入的數字轉換成現金的過濾器。可以跟上貨幣符號(默認$)和保留的小數位(默認2)。
利用上面的兩個過濾器,能夠很好的把一個json數組的商品清單格式化成通熟易懂的商品價格清單。
如果只想要電器類商品,可以在v-for上加過濾條件:
<li v-for="product in products | filterBy 'electronics' in 'category' "> {{ product.name | capitalize }} - {{ product.price | currency }} </li>
上面的例子,就是用filterBy 過濾在 'category'中含有'electronics' 關鍵字的列表,返回的列表就是只含有 'electronics' 關鍵字的列表。
如果想要多個搜索條件:
<li v-for="product in products | filterBy 'electronics' in 'category' 'name' "> {{ product.name | capitalize }} - {{ product.price | currency }} </li>
上面的例子,就是用filterBy 過濾在 'category' 和 'name' 中含有'electronics' 關鍵字的列表。
最后我們還需要將這個列表用字母進行排序。我們可以在 filterBy 過濾器的基礎上,鏈式調用orderBy 過濾器。
<ul> <li v-for="product in products | filterBy 'electronics' in 'category' | orderBy 'name' " > {{ product.name | capitalize }} - {{ product.price | currency }} </li> </ul>
orderBy 的排序方式默認是升序,如果想要降序,只需要加一個小于0的參數:
<li v-for="product in products | filterBy 'electronics' in 'category' | orderBy 'name' -1 " >
下面看看vue自帶過濾器有哪些,并附帶小示例。最后記得看看如果自定義過濾器哦!
vue自帶的過濾器
capitalize(首字母大寫)
<div class="test"> {{message | capitalize}} </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { message: "javan" } }) </script>
上面代碼輸出:Javan
uppercase(全部大寫)
// 初始message:abc {{message | uppercase}} // 上面代碼輸出:ABC
lowercase(全部小寫)
// 初始message:ABC {{message | lowercase}} // 上面代碼輸出:abc
currency(輸出金錢以及小數點)
<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>
第一個參數 {String} [貨幣符號] - 默認值: '$'
第二個參數 {Number} [小數位] - 默認值: 2
pluralize(變復數)
如果只有一個參數,復數形式只是簡單地在末尾添加一個 “s”。如果有多個參數,參數被當作一個字符串數組,對應一個、兩個、三個…復數詞。如果值的個數多于參數的個數,多出的使用最后一個參數。
<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(事件延時)
1) 限制: 需在@里面使用
2) 參數:{Number} [wait] - 默認值: 300
3) 功能:包裝處理器,讓它延遲執行 x ms, 默認延遲 300ms。包裝后的處理器在調用之后至少將延遲 x ms, 如果在延遲結束前再次調用,延遲時長重置為 x ms。
<div class="test"> <button id="btn" @click="doSomeThing | debounce 10000">點擊我</button> </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", methods: { doSomeThing: function () { // do something } } }) </script>
limitBy(排序)
1) 限制:需在v-for(即數組)里面使用
第一個參數:{Number} 取得數量
第二個參數:{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(過濾)
1) 限制:需在v-for(即數組)里面使用
第一個參數: {String | Function} 需要搜索的字符串
第二個參數: in (可選,指定搜尋位置)
第三個參數: {String} (可選,數組格式)
<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是數組,不是對象 {name: "lily"}, {name: "lucy"}, {name: "oo"}, {dada: "lsh"}, {dada: "ofg"} ] } }) </script>
orderBy(排序)
1) 限制:需在v-for(即數組)里面使用
第一個參數: {String | Array | Function} 需要搜索的字符串
第二個參數: {String} 可選參數 order 決定結果升序(order >= 0)或降序(order < 0),默認是升序
<div class="test"> 遍歷數組 <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> 遍歷含對象的數組 <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> 使用函數排序 <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是數組,不是對象 { name: 'Jackie', age: 62 }, { name: 'Chuck', age: 76 }, { name: 'Bruce', age: 61 } ] }, methods: { ageByTen: function () { return 1; } } }) </script>
自定義過濾器
<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>
以上是“vue中內置過濾器怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。