zoukankan      html  css  js  c++  java
  • 3.Vue过滤器

    1.概念:

     Vue.js 允许你自定义过滤器,可被用作一些常见文本的格式化,过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;

    2.过滤器调用时候的格式:

    例如:下面HTML元素使用过滤器(在输出ctime的时候使用过滤器进行处理,| 管道符)

    使用Vue过滤器对下面时间进行格式化:

    <td>{{item.ctime | dataFormat('yyyy-mm-dd')}}</td>

    3.在Vue中过滤器定义语法:

    Vue.filter('过滤器的名称', function(){})

    注意:过滤器中的 function 中的第一个参数已经被规定死了,永远都是过滤器|管道符前面传递过来的数据
    例如:Vue.filter('过滤器的名称', function (data) {return data + '123'})

    4.过滤器的基本使用:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
        <p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p>
      </div>
    
      <script>
        // 定义一个Vue全局的过滤器,名字叫做msgFormat,过滤器中可进行传参
        Vue.filter('msgFormat', function (msg, arg, arg2) {
          // 字符串的replace方法的第一个参数,除了可写一个字符串之外,还可以定义一个正则,g表示全局匹配
          return msg.replace(/单纯/g, arg + arg2)
        })
    
        Vue.filter('test', function (msg) {
          return msg + '========'
        })
    
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'
          },
          methods: {}
        });
      </script>
    </body>
    </html>
    View Code

     在Vue中可以多次调用过滤器

    5.定义格式化时间的全局过滤器dataFormat('yyyy-mm-dd')带参数:

    <script>
        //全局的过滤器,进行时间的格式化(所谓的全局过滤器,就是所有的Vue的vm实例都共享的)
        Vue.filter('dateFormat', function (dateStr, pattern) {
          // 根据给定的时间字符串,得到特定的时间
          var dt = new Date(dateStr)
          //yyyy-mm-dd
          var y = dt.getFullYear()
          var m = dt.getMonth() + 1
          var d = dt.getDate()
    
          if (pattern.toLowerCase() === 'yyyy-mm-dd') {
            return `${y}-${m}-${d}`
          } else {
            var hh = dt.getHours()
            var mm = dt.getMinutes()
            var ss = dt.getSeconds()
            return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
          }
        })
    </script>
    

    6.定义格式化时间的全局过滤器dataFormat()不带参数:

    <script>
        //全局的过滤器,进行时间的格式化(所谓的全局过滤器,就是所有的VM实例都共享的)
        Vue.filter('dateFormat', function (dateStr, pattern="") {
          // 根据给定的时间字符串,得到特定的时间
          var dt = new Date(dateStr)
          //yyyy-mm-dd
          var y = dt.getFullYear()
          var m = dt.getMonth() + 1
          var d = dt.getDate()
        //pattern设置为""(ES6形参的默认值),否则pattern.toLowerCase报错
          if (pattern.toLowerCase() === 'yyyy-mm-dd') {
            return `${y}-${m}-${d}`
          } else {
            var hh = dt.getHours()
            var mm = dt.getMinutes()
            var ss = dt.getSeconds()
            return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
          }
        })
    </script>
    

    7.定义格式化时间的私有过滤器(局部):

    控制区域:app2的私有过滤器

    <div id="app2">
        <h3 v-color="'pink'" v-fontweight="900" v-fontsize="50">{{ dt | dateFormat }}</h3>
    </div>
     //如何自定义一个私有的过滤器(局部)
        var vm2 = new Vue({
          el: '#app2',
          data: {
            dt: new Date()
          },
          methods: {},
          filters: { // 定义私有过滤器  过滤器有两个条件【过滤器名称 和 处理函数】
            //过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,优先调用私有过滤器
            dateFormat: function (dateStr, pattern = '') {
              //根据给定的时间字符串,得到特定的时间
              var dt = new Date(dateStr)
    
              //yyyy-mm-dd
              var y = dt.getFullYear()
              var m = (dt.getMonth() + 1).toString().padStart(2, '0')
              var d = dt.getDate().toString().padStart(2, '0')
    
              if (pattern.toLowerCase() === 'yyyy-mm-dd') {
                return `${y}-${m}-${d}`
              } else {
                var hh = dt.getHours().toString().padStart(2, '0')
                var mm = dt.getMinutes().toString().padStart(2, '0')
                var ss = dt.getSeconds().toString().padStart(2, '0')
    
                return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~~`
              }
            }
          }
        })
    

     注意:使用ES6中的字符串新方法 String.prototype.padStart(maxLength, fillString='') 或 String.prototype.padEnd(maxLength, fillString='')来填充字符串;

  • 相关阅读:
    集合
    WPF自定义控件--模拟手机密码输入控件,在输入时显示最后一个输入密码字符
    配置VS不生成XML和PDB文件
    Wlan常见命令(可以查看连接密码)
    云栖社区用机器人爬CSDN的文章?
    Marshal.PtrToStringAnsi中文乱码
    各种手工DIY
    yii2修改默认控制器
    3D模型网站分享
    SemanticZoom配合GridView组件的使用关键点
  • 原文地址:https://www.cnblogs.com/yaboya/p/10240885.html
Copyright © 2011-2022 走看看