1. 程式人生 > 程式設計 >Vue封裝全域性過濾器Filters的步驟

Vue封裝全域性過濾器Filters的步驟

(PS:本文程式碼在vue-cli3構建的基礎vue專案之上進行編寫:vue create my-project)

  在前後端分離的專案中,經常會有後臺返回的資料需要經過處理才能顯示到頁面上的場景。

  使用最多的場景就是日期/時間、數字、字串的格式化處理,實際業務中可能還有更復雜的資料處理邏輯。

  下面就拿封裝全域性的處理數字和字串的 filter 來展示 vue 如何 封裝全域性filter 並統一處理。

一、定義/封裝過濾器

  在 src目錄 下新建 filters目錄 用來專門存放全域性過濾器,如果專案的過濾器過多,那麼就要按型別分類。
  如果專案需要前臺處理的資料不是太多,那麼就在 filters目錄 下新建一個 index.js 來存放所有的過濾器就足夠了。

index.js程式碼如下:

// 封裝過濾器
// 過濾器的宣告可以有下列多種寫法

/**
 * Number formatting by unit
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 * @return {string}
 */
function numberFormatter(num,digits) {
 const si = [
  { value: 1e18,symbol: "E" },{ value: 1e15,symbol: "P" },{ value: 1e12,symbol: "T" },{ value: 1e9,symbol: "G" },{ value: 1e6,symbol: "M" },{ value: 1e3,symbol: "k" }
 ];
 for (let i = 0; i < si.length; i++) {
  if (num >= si[i].value) {
   return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/,'$1') + si[i].symbol
  }
 }
 return num.toString();
}

/**
 * Number formatting by thousand
 * like 10000 => "10,000"
 * @param {number} num
 * @return {string}
 */
const toThousandFilter = function(num) {
 return (+num || 0).toString().replace(/^-?\d+/g,m => m.replace(/(?=(?!\b)(\d{3})+$)/g,','))
};

/**
 * Upper case first char
 * like "wenyuan" => "Wenyuan"
 * @param {string} string
 * @return {string}
 */
const uppercaseFirst = string => {
 return string.charAt(0).toUpperCase() + string.slice(1);
};

export default {
 numberFormatter,toThousandFilter,uppercaseFirst
};

二、註冊過濾器

  然後在 main.js 中引入註冊即可使用:

import filters from "./filters"; // global filters

// register global utility filters
Object.keys(filters).forEach(key => {
 Vue.filter(key,filters[key]);
});

Vue封裝全域性過濾器Filters的步驟

三、在元件內使用寫好的過濾器

  在元件中使用:

<template>
 <div class="home">
  <img alt="Vue logo" src="../assets/logo.png"/>
  <h1>score:{{ score | numberFormatter }}</h1>
  <h1>score:{{ score | toThousandFilter }}</h1>
  <h1>username:{{ username | uppercaseFirst }}</h1>
 </div>
</template>

<script>
export default {
 name: "home",components: {},data() {
  return {
   score: 1200000,username: "wenyuan"
  };
 }
};
</script>

四、效果

Vue封裝全域性過濾器Filters的步驟

五、可能的報錯與注意點

  在 main.js 中,要先定義過濾器,再新建 vue 例項,否則會報Failed to resolve filter: xxx的錯誤。

以上就是Vue封裝全域性過濾器Filters的步驟的詳細內容,更多關於vue封裝過濾器的資料請關注我們其它相關文章!