zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    团队作业(9)
    团队作业(8)
    团队作业(7)
    团队作业(6)
    团队作业(5)
    团队作业(4)
    团队作业(3)
    05数据爬去
    02周总结
    04结对开发
  • 原文地址:https://www.cnblogs.com/grow-up-up/p/13027405.html
Copyright © 2011-2022 走看看