VueパッケージグローバルフィルタFiltersの手順


(PS:本文コードはvue-cli 3で構築された基本的なvueプロジェクトの上で作成される:vue create my-project)
前後に分離された項目では、バックグラウンドから戻ってくるデータが処理されてからページに表示されるシーンがよくあります。
最も多く使われているシーンは日付・時間・数字・文字列のフォーマット処理であり、実際の業務ではより複雑なデータ処理ロジックがあります。
次にグローバルな処理数字と文字列のfilterをカプセル化して、グローバル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
};
二、フィルタを登録する
メール・jsに登録を入れて使えばいいです。

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

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

三、コンポーネント内でいいフィルタを使います。
コンポーネントで使う:

<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>
四、効果

五、可能なエラーと注意点
main.jsでは、フィルタを定義してからvueインスタンスを新規作成します。そうでなければ、Failed to resolive filter:xxxのエラーを報告します。
以上がVueパッケージグローバルフィルタFiltersの手順の詳細です。Vueパッケージフィルタに関する資料は他の関連記事に注目してください。