国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue 內置過濾器的使用總結(附加自定義過濾器)

2019-11-19 12:21:28
字體:
來源:轉載
供稿:網友

前言

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>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连江县| 泸州市| 万载县| 九龙坡区| 沙河市| 平谷区| 马山县| 鹤岗市| 安西县| 鲁甸县| 大荔县| 泽州县| 浦东新区| 泗洪县| 文成县| 屏南县| 洮南市| 平遥县| 资源县| 东宁县| 卢龙县| 简阳市| 南皮县| 九龙县| 枣强县| 仪征市| 襄樊市| 安多县| 内丘县| 吐鲁番市| 汉中市| 西林县| 梓潼县| 安阳县| 济宁市| 祁东县| 东乌珠穆沁旗| 仙游县| 宁阳县| 渝中区| 叶城县|