filter過濾器的使用


在vue項目中我們經常需要對數據進行處理,比如需要將時間戳處理成時間節點,或者將時間節點處理成時間戳等等。

在項目中可以注冊全局過濾器,也可以在組件中注冊過濾器。

1、 注冊全局過濾器

ps:注冊全局過濾器,必須在new Vue實例之前注冊。Vue.filter()

1 Vue.filter(名稱,function(value){// 業務邏輯})
 1 // 轉為大小字母
 2 Vue.filter('strToUpperCase', function (str) {
 3   if (!str) {
 4     return str;
 5   }
 6   return str.toString().toUpperCase();
 7 });
 8 // 轉為小寫字母
 9 Vue.filter('strToLowerCase', function (str) {
10   if (!str) {
11     return str;
12   }
13   return str.toString().toLowerCase();
14 });
15 // vue實例
16 new Vue({
17   render: h => h(App),
18   store,
19   router
20 }).$mount('#app');

 

 

 

 2、組件中注冊過濾器

 1 <template>
 2   <div>
 3     <input type="text" v-model.number="val" />
 4     <div>輸入框的值(小於10在前面補0):{{val|addZero}}</div>
 5     <div :title="val|addZero">鼠標懸浮在我上面顯示的是輸入框的值補0</div>
 6 
 7     <div>{{'Hello'|addWorld}}</div>
 8   </div>
 9 </template>
10 <script>
11 export default {
12   data() {
13     return {
14       val: undefined
15     };
16   },
17   filters: {
18     // 數字補0
19     addZero(val) {
20       if (isNaN(val)) {
21         return val;
22       } else {
23         if (val < 10) {
24           return "0" + val;
25         } else {
26           return val;
27         }
28       }
29     },
30     // Hello后面加 World
31     addWorld(str) {
32       if (str === "Hello") {
33         return str + " World!";
34       }
35     }
36   },
37   created() {},
38   methods: {}
39 };
40 </script>
41 <style scoped>
42 </style>

 

 過濾器中的第一個參數是 “|” 前的值,過濾器中不能獲取 this,因為當我們需要傳參的時候,可以在使用中去傳參,也可以過濾器疊在一起使用。

 1 <template>
 2   <div>
 3     <!-- 過濾器也是可以傳參數的 -->
 4     <div>{{name}}的英文是:{{name|getEnglish(list)}}</div>
 5 
 6     <!-- 過濾器疊在一起使用,name作為filter1的第一個參數,filter1返回的值作為filter2的第一個參數,最后顯示filter2的返回值 -->
 7     <div>疊加顯示:{{name|filter1|filter2}}</div>
 8   </div>
 9 </template>
10 <script>
11 export default {
12   data() {
13     return {
14       name: "蘋果",
15       list: [
16         { name: "蘋果", english: "apple" },
17         { name: "香蕉", english: "banner" },
18         { name: "橘子", english: "orange" }
19       ]
20     };
21   },
22   filters: {
23     getEnglish(val, list) {
24       // 過濾器中不能獲得vue實例
25       console.log("this:", this); // undefined
26       var eng = "";
27       list.forEach(one => {
28         if (one.name === val) {
29           eng = one.english;
30         }
31       });
32       return eng;
33     },
34     filter1(val) {
35       return val + "過濾器1";
36     },
37     filter2(val) {
38       return val + "過濾器2";
39     }
40   },
41   created() {},
42   methods: {}
43 };
44 </script>
45 <style scoped>
46 </style>

 

 

 

 

 

總結:

1. 全局過濾器注冊必須在new Vue實例之前,Vue.filter(名稱,function(val){// 業務邏輯})

2. 組件中注冊過濾器使用,filters:{名稱1:function(val){},名稱2:function(val){}},注意:組件中注冊的單詞是“f-i-l-t-e-r-s”,全局注冊沒有s。

3. 過濾器中不能獲得 this,但使用時可以傳參,也可以疊加使用過濾器,如:<div>{{name|filter1(list)|filter2}}</div>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM