Vue2中的過濾器filter使用及註意說明

Vue2中的過濾器是什麼

什麼是vue的過濾器

過濾器可以通俗理解成是一個特殊的方法,用來加工數據的

比如枚舉值可以使用過濾器:如 1 2 3 4 對應 成功 失敗 進行中 已退回 比如價格後面跟個過濾器,將價格格式化成小數點兩位 比如時間格式化等,又比如可以過濾聊天中的某些臟話

過濾器怎麼寫

  <div id="app">
        <h3>過濾器基本使用</h3>
      //   <!--在雙花括號中使用全局過濾器 格式:{{值 | 過濾器的名稱}}-->
        <p> {{content|contentFilter}} </p>
     //    <!--在v-bind中使用全局過濾器 格式:v-bind:id="值 | 過濾器的名稱"-->
        <p v-bind:id="1 | addZero">11</p>
        <h3>過濾器接收參數</h3>
        <p> {{ num1| add(num2,num3)}} </p>
    </div>
Vue.filter('contentFilter', function (value) {
            //全局過濾器
            if (!value) {
                return ""
            }
            return value.toUpperCase().replace('TMD', '*不許說臟話噢*').replace('SB', '*不許說臟話噢*')
        })
         Vue.filter("addZero",function(value){
               // 如果value的值小於10則在前面添加0然後返回,否則直接返回value值
               return value<10?"0"+value:value;
           });
        new Vue({
            el: '#app',
            data: {
                content: '小夥子,TMD就是個sb',
                num1: 40,
                num2: 60,
                num3: 70,
            },
             filters: {
                //局部過濾器(本地過濾器)
                add(n1, n2, n3) {
                    return n1 + n2 + n3
                }
            }
        })
      

註意:當全局過濾器和局部過濾器重名時,會采用局部過濾器

局部過濾器優先於全局過濾器被調用

一個表達式可以使用多個過濾器。過濾器之間需要用管道符“|”隔開。其執行順序從左往右

註意filter方法在vue3中已被廢除

vue3要精簡代碼,並且filter功能重復,filter能實現的功能,methods和計算屬性基本上也可以實現。把filter這方面的vue源碼給刪掉,這樣更加方便維護。

例如

使用computed實現

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快遞公司:{{ item.deliverCompany }}</li>
      <!-- 使用計算屬性 -->
      <li>運輸狀態:{{ computedText(item.expressState) }}</li>
    </ul>
  </div>
</template>
<script>
export default {
   data() {
    return {
      arr: [
        {
          deliverCompany: "京東快遞",
          expressState: "1",
        },
        {
          deliverCompany: "順豐快遞",
          expressState: "2",
        },
        {
          deliverCompany: "中通快遞",
          expressState: "3",
        },
        {
          deliverCompany: "郵政快遞",
          expressState: "4",
        },
        {
          deliverCompany: "極兔快遞",
          expressState: "5",
        },
        {
          deliverCompany: "某某快遞",
          expressState: null,
        },
      ],
    };
  },
  computed: {
    computedText() {
      // 計算屬性要return一個函數接收參數
      return function (state) {
        switch (state) {
          case "1":
            return "待發貨";
            break;
          case "2":
            return "已發貨";
            break;
          case "3":
            return "運輸中";
            break;
          case "4":
            return "派件中";
            break;
          case "5":
            return "已收貨";
            break;
          default:
            return "快遞信息丟失";
            break;
        }
      };
    },
  },
};
</script>

使用methods實現

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快遞公司:{{ item.deliverCompany }}</li>
      <!-- 使用方法 -->
      <li>運輸狀態:{{ methodsText(item.expressState) }}</li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      arr: [
        {
          deliverCompany: "京東快遞",
          expressState: "1",
        },
        {
          deliverCompany: "順豐快遞",
          expressState: "2",
        },
        {
          deliverCompany: "中通快遞",
          expressState: "3",
        },
        {
          deliverCompany: "郵政快遞",
          expressState: "4",
        },
        {
          deliverCompany: "極兔快遞",
          expressState: "5",
        },
        {
          deliverCompany: "某某快遞",
          expressState: null,
        },
      ],
    };
  },
  methods: {
    methodsText(state) {
      switch (state) {
        case "1":
          return "待發貨";
          break;
        case "2":
          return "已發貨";
          break;
        case "3":
          return "運輸中";
          break;
        case "4":
          return "派件中";
          break;
        case "5":
          return "已收貨";
          break;
        default:
          return "快遞信息丟失";
          break;
      }
    },
  },
};
</script>

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: