Vue案例引發的「過濾器」的使用

六小登登發表於2019-03-11

最近在專案的開發中,出現一些格式化資料的情況,比如字母的大小寫,比如一些價格的資料格式。等等一些格式的顯示。

Name Price
BTC $3896.23
ETH $136.64

在上面的表格中,我們需要處理資料的顯示。這是我們時常遇到的情況。

通常我們會直接處理資料的輸出,可以這麼做。

computed: {
    result() {
      return this.prices.map(price => "$" + price);
    }
}
複製程式碼

這些都是通過修改資料做到的。

不過,Vue 中給我們提供了一種格式化資料功能「過濾器」。

filters 與 計算屬性(computed),方法(methods)不同的是,filters 不會修改資料,只是改變使用者看到的輸出。Vue 從 2.0 版本之後去除了內建的「過濾器」。所以我們在使用時需要自己去定義。

接下來,我們就來看看看在 Vue 中如何使用「過濾器」。

首先過濾器可以用在兩個地方:差值表示式 {{ }} 和 v-bind 表示式,然後由管道操作符“ | ”進行指示。

知道在什麼地方時候,那我們就再來看看如何定義過濾器。我們有兩種方式定義。

本地過濾器

我們可以把過濾器定義在當前使用的元件內。我們利用過濾器來修改上面的表格輸出格式。

{{price.price | currency}}

filters: {
    currency(value) {
      return "$" + value;
    }
}
複製程式碼

全域性過濾器

這裡需要注意的是,使用全域性過濾器時,必須要在 Vue 的例項之前。

Vue.filter("currency", function (value) {
  return "$" + value;
});


new Vue({
 //...
})
複製程式碼

此時,我們就可以愉快的在元件中使用過濾器了。

使用者體驗是非常重要的一個環節,我們可以利用過濾器去優化。通常利用表格展示資料時,你無法保證每個欄位的屬性值都是存在且合理的。

這時就可以利用「過濾器」。把不合理的值顯示為 “--”,這是最為常見的手段。

filters: {
    filterPrice(value) {
      return value ? value : "--";
    }
}
複製程式碼

過濾器引數

過濾器會把表示式中的值始終當作函式的第一個引數。由於過濾器是一個函式,所以我們也可以額外的傳入引數。

{{ data | filterPrice(arg1, arg2) }}
複製程式碼

比如我們把上面的案例修改一下,我們不僅僅需要把美元格式化,我們還需要格式化人民幣等等,很多種的符號,這時就可以利用傳參的方式。

{{price.price | filterPrice('$')}}

filters: {
    filterPrice(price, prefix) {
      return prefix + price;
    }
}
複製程式碼

除此之外,「過濾器」還可以進行串聯使用。

{{ data | filterA | filterB }}
複製程式碼

串聯使用時,會把第一個產生的結果,作為引數傳遞給第二個過濾器使用,以此類推。

好了今天我們 Vue 的過濾器就說到這,大家不妨多多嘗試下在專案中使用,提高我們的開發效率,不能總是想著去修改資料,這些功能與套路有時會發揮很好的價值。

如果文章對你有啟發,記得點個贊。

關注我的微信公眾號:六小登登,更多幹貨文章,歡迎一起交流。

人人都可以成為高手。我是一個會技術,又寫乾貨的碼農。歡迎勾搭。

相關文章