首頁  >  文章  >  web前端  >  Vue.js學習之過濾器詳解

Vue.js學習之過濾器詳解

高洛峰
高洛峰原創
2017-02-06 11:18:341278瀏覽

前言

在這個教程中,我們將透過幾個例子,了解並學習VueJs的過濾器。閱讀這篇文章中的前提是你對Vue已經有了基本的語法基礎。

Vue.Js中的過濾器基礎

過濾器是一個透過輸入數據,能夠及時對數據進行處理並傳回一個數據結果的簡單函數。 Vue有很多很方便的過濾器,可以參考官方文檔,http://cn.vuejs.org/api/#過濾器,過濾器通常會使用管道標誌“ | ”, 例如:

{{ msg | capitalize }}
// 'abc' => 'ABC'

uppercase過濾器: 將輸入的字串轉換成大寫字母的過濾器。

VueJs允許你鍊式調用過濾器,簡單的來說,就是一個過濾器的輸出成為下一個過濾器的輸入,然後再次過濾。接下來,我們可以想像一個比較簡單的例子,使用了Vue的 filterBy + orderBy 過濾器來過濾所有商品products。過濾出來的產品是屬於水果類商品。

filterBy過濾器 : 過濾器的值必須是一個數組,filterBy + 過濾條件。過濾條件是:'string || function'+ in 'optionKeyName'

orderBy過濾器 : 過濾器的值必須是一個數組,orderBy + 過濾條件。過濾條件是:'string || array ||function' + 'order ≥ 0 為升序|| order

接下來,我們可以看下面這個例子:我們有一個商品數組products,我們希望遍歷這個數組,並把他們印成一張清單,這個用v-for很容易實現。

<ul class="product">
 <li v-for="product in products|filterBy &#39;水果&#39; in &#39;category&#39; |orderBy &#39;price&#39; 1">
 {{product.name}}-{{product.price | currency}}
 </li>
</ul>

上面的例子,就是用filterBy 過濾在'category'中含有'水果' 關鍵字的列表,返回的列表就是只含有'水果' 關鍵字的列表,而orderBy過濾器是根據價格做了一個升序,如果想要降序,只需要加一個小於0的參數;

自訂過濾器

雖然VueJs給我們提供了很多強有力的過濾器,但有時還是不夠。值得慶幸的,Vue為我們提供了一個乾淨簡潔的方式來定義我們自己的過濾器,之後我們就可以利用管道 “ | ” 來完成過濾。

定義一個全域的自訂過濾器,需要使用Vue.filter()建構器。這個構造器需要兩個參數。

Vue.filter() Constructor Parameters:

   

      1.filterId: 過濾器ID,用來做為你的過濾器的唯一標識;

 到的參數格式化為想要的資料結果。

上面的例子中,我們要實現商品價格打5折該怎麼做呢?其實就是實現的一個自訂的過濾器,表示將商品的價格打了5折;而要實現它,需要完成的是:

      a、使用Vue.filter()構造器創建一個過濾器叫做discount

      b、輸入商品的原價,能夠返回其打五折之後的折扣價

代碼見下面:

Vue.filter(&#39;discount&#39;, function(value) {
 return value * .5;
});
var product = new Vue({
 el: &#39;.product&#39;,
 data: {
 products: [
  {name: &#39;苹果&#39;,price: 25,category: "水果"},
  {name: &#39;香蕉&#39;,price: 15,category: "水果"},
  {name: &#39;雪梨&#39;,price: 65,category: "水果"},
  {name: &#39;宝马&#39;,price: 2500,category: "汽车"},
  {name: &#39;奔驰&#39;,price: 10025,category: "汽车"},
  {name: &#39;柑橘&#39;,price: 15,category: "水果"},
  {name: &#39;奥迪&#39;,price: 25,category: "汽车"}
 ]
 },
})

現在就可以像使用Vue自帶的過濾器一樣使用自訂器了

現在就可以像使用Vue自帶的過濾器一樣使用自訂器了

上面代碼實現的商品打5折,而如果要實現價格打任意折扣呢?應該在discount過濾器裡增加一個折扣數值參數,改造一下我們的過濾器。

<ul class="product">
 <li v-for="product in products|filterBy &#39;水果&#39; in &#39;category&#39; |orderBy &#39;price&#39; 0">
 {{product.name}}-{{product.price|discount | currency}}
 </li>
</ul>

我們也可以在我們Vue實例裡構造我們的過濾器,這樣構造的好處是,這樣就不會影響到其他不需要用到這個過濾器的Vue實例。

Vue.filter(&#39;discount&#39;, function(value, discount) {
 return value * (discount / 100);
});

定義在全域就能在所有的實例中呼叫過濾器,如果定義在了實例裡就在實例裡呼叫過濾器。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或使用vue能帶來一定的幫助,如果有疑問大家可以留言交流。

更多Vue.js學習之過濾器詳解相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn