• 简述Vue中的过滤器


    1、过滤器的基本概念

    • 概念:本质上是函数;
    • 作用:用户输入数据后,它能够进行处理,并返回一个数据结果;(无return语句不会报错,但是这种过滤器没有丝毫意义)
    • 格式:管道符(  |  )进行连接,而管道符的作用就是:上一个命令的输出可以作为下一个命令的输入;
    • 位置:只能是Mustache表达式、v-bind表达式;{{ msg | filterFuction }}       <p v-bind:id="msg | filterFuction"></p>
    • 强调:在过滤器函数中,表达式的值作为第一个参数、带引号的参数会被当做字符串处理、而不带引号的参数则会被当做属性名处理,过滤器可以接受参数,参数跟在过滤器名称的后面,参数之间以逗号分隔,例如:
      {{ message  |  filterFunction('arg1',arg2)}}//过滤器函数中传入的参数以后面开始的参数来统计和赋值

    2、过滤器种类

    • 内置过滤器(Vue2.x之后没有内置过滤器,必须自己定义)
      • capitalize:将表达式中的首字母转换为大写形式;
      • uppercase:将表达式的所有字母转换为大写格式;
      • lowercase:将表达式的所有字母转换为小写格式;
      • json过滤器:相当于JSON.stringify();
      • 限制:处理并返回过滤后的数组   处理对象:数组
        • limitBy:第一个参数是显示数据的数量,第二个参数(可选)为开始显示的数组下标,默认为2;
        • filterBy:(字符串|函数 in 过滤值);
        • orderBy:返回排序后的数组,(字符串|数组|函数,排序方式(可选,大>=0升序,<0降序,默认为1));
      • currency:将数字值转换为货币的形式输出(符号:默认$,小数位:默认为2);
      • debounce过滤器:默认300ms
    • 自定义过滤器
      • 语法:Vue.filter(ID,function(){ })      
      • 步骤:
        • 建立js文件
        • 在app.js文件中引入
        • 写filter函数
      • 单个参数(以值为参数)
        • 全局写法:
          import Vue from 'vue'
          Vue.filter('uppercase',function(value){
              if(value){
                  return value.toUpperCase()
              }
          })

          使用:{{ data | uppercase}}   data : 'wxh'

                                   结果:WXH

        • 局部写法:(只能在当前实例中使用)

          <template>
            <div id="example">{{ data | uppercase}}</div>
          </template>
          <script>
          export default {
            name: "example",
            data() {
              return {
                data: "wxh"
              };
            },
            filters: {
              uppercase: function(value) {
                if (value) {
                  return value.toUpperCase();
                }
              }
            },
            methods: {}
          };
          </script>
          View Code

          使用与结果跟上边一样

      • 多参数(参数之间用  “,”  分开)Vue1.x以空格分隔
        • 写过滤器函数:
          import Vue from 'vue'
          Vue.filter('concat',function(value,prep,desc){
              if(value){
                  return value + prep + desc
              }
          })
        • 在组件中使用:
          <template>
            <div id="example">{{ data | concat('是一个',describe)}}</div>
          </template>
          <script>
          export default {
            name: "example",
            data() {
              return {
                data: "wxh",
                describe : "善良的小姑娘"
              };
            },
            methods: {}
          };
          </script>

          结果:

                                   

      • 双向过滤器:(Vue1.x之后被废除,因此无法实现数据的双向绑定,而我们可以采用computed里面的getter与setter方法进行数据双向绑定,但是比较繁琐)
        filters : {
            doubleFilter : {//自定义  过滤器  以及   计算属性  形式差不多
              //model--->view    将model数据输出到view层之前进行数据转化
              read : function(value){
        
              },
              //view--->model     将视图的值在写会model前进行转化
              write : function(newVal,oldVal){
        
              }
            }
          }

    3、过滤器的一个小型demo

    • 进行数据的格式化,让数据按照我们的规定输出,例如:将日期转化为   2019-07-15 15:11:49
    • 过滤器
      import Vue from 'vue'
      
      Vue.filter('timeFormatter', function (value) {
          if (value) {
              let date = new Date(value);
              let y = date.getFullYear();
              let MM = date.getMonth() + 1;
              MM = MM < 10 ? ('0' + MM) : MM;
              let d = date.getDate();
              d = d < 10 ? ('0' + d) : d;
              let h = date.getHours();
              h = h < 10 ? ('0' + h) : h;
              let m = date.getMinutes();
              m = m < 10 ? ('0' + m) : m;
              let s = date.getSeconds();
              s = s < 10 ? ('0' + s) : s;
              return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
          }
      })
      View Code

      使用:

      <template>
        <div id="example">
          <p>过滤器:{{ time | timeFormatter}}</p>
        </div>
      </template>
      <script>
      export default {
        name: "example",
        data() {
          return {
           time :  new Date().getTime()
          };
        },
        methods: {}
      };
      </script>
      View Code

      结果:过滤器:2019-07-15 15:13:50

    • 在定时器 “ 补零 ” 方面,也可以采用es6的方法;
      import Vue from 'vue'
      
      Vue.filter('timeFormatter', function (value) {
          if (value) {
              let date = new Date(value);
              let y = date.getFullYear();
              let MM = date.getMonth() + 1;
              MM = MM.toString().padStart(2,'0');//padStart为字符串的方法  为两位数,不足时在开头补零
              let d = date.getDate();
              d = d.toString().padStart();
              let h = date.getHours();
              h = h.toString().padStart();
              let m = date.getMinutes();
              m = m.toString().padStart();
              let s = date.getSeconds();
              s = s.toString().padStart();
              return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
          }
      })
      View Code

    4、遇到的问题

      无

  • 相关阅读:
    hdu1257
    P6198 [EER1]单调栈 题解(分治+构造)
    P3193 [HNOI2008]GT考试 题解(kmp+矩阵快速幂)
    Product of GCDs 题解(欧拉降幂+贡献)
    P2501 [HAOI2006]数字序列 题解(dp+构造)
    欧拉降幂
    I love max and multiply 题解(二进制dp)
    永不言弃 题解(线段树维护hash+二分)
    Problem D. Ice Cream Tower 题解(二分+贪心)
    E. Kefa and Watch 题解(线段树维护hash+循环节结论)
  • 原文地址:https://www.cnblogs.com/wxh0929/p/11188044.html
Copyright © 2020-2023  润新知