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

    Vue过滤器

    • Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:

    双花括号插值

    v-bind 表达式

    • 过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
    <!-- 在双花括号中 -->
    {{ message | capitalize }}
    
    <!-- 在 `v-bind` 中 -->
    <div v-bind:id="rawId | formatId"></div>
    
    • 你可以在一个组件的选项中定义本地的过滤器:
    filters: {
      capitalize: function (value) {
        if (!value) return ''
        value = value.toString()
        return value.charAt(0).toUpperCase() + value.slice(1)
      }
    }
    
    • 或者在创建 Vue 实例之前全局定义过滤器:
    Vue.filter('capitalize', function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    })
    
    new Vue({
      // ...
    })
    
    • 当全局过滤器和局部过滤器重名时,会采用局部过滤器。

    • 下面这个例子用到了 capitalize 过滤器:

    • 过滤器函数总接收表达式的值 (之前的操作链的结果) 作为第一个参数。在上述例子中,capitalize 过滤器函数将会收到 message 的值作为第一个参数。

    过滤器可以串联:

    {{ message | filterA | filterB }}
    

    在这个例子中,filterA 被定义为接收单个参数的过滤器函数,表达式 message 的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

    过滤器是 JavaScript 函数,因此可以接收参数:

    {{ message | filterA('arg1', arg2) }}
    

    这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

    带参数过滤器使用案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <div>{{date | format('yyyy-MM-dd hh:mm:ss')}}</div>
      </div>
      <script type="text/javascript" src="js/vue.js"></script>
      <script type="text/javascript">
        /*
          过滤器案例:格式化日期
          
        */
        // Vue.filter('format', function(value, arg) {
        //   if(arg == 'yyyy-MM-dd') {
        //     var ret = '';
        //     ret += value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate();
        //     return ret;
        //   }
        //   return value;
        // })
        Vue.filter('format', function(value, arg) {
          function dateFormat(date, format) {
              if (typeof date === "string") {
                  var mts = date.match(/(/Date((d+))/)/);
                  if (mts && mts.length >= 3) {
                      date = parseInt(mts[2]);
                  }
              }
              date = new Date(date);
              if (!date || date.toUTCString() == "Invalid Date") {
                  return "";
              }
              var map = {
                  "M": date.getMonth() + 1, //月份 
                  "d": date.getDate(), //日 
                  "h": date.getHours(), //小时 
                  "m": date.getMinutes(), //分 
                  "s": date.getSeconds(), //秒 
                  "q": Math.floor((date.getMonth() + 3) / 3), //季度 
                  "S": date.getMilliseconds() //毫秒 
              };
    
              format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
                  var v = map[t];
                  if (v !== undefined) {
                      if (all.length > 1) {
                          v = '0' + v;
                          v = v.substr(v.length - 2);
                      }
                      return v;
                  } else if (t === 'y') {
                      return (date.getFullYear() + '').substr(4 - all.length);
                  }
                  return all;
              });
              return format;
          }
          return dateFormat(value, arg);
        })
        var vm = new Vue({
          el: '#app',
          data: {
            date: new Date()
          }
        });
      </script>
    </body>
    </html>
    
    
  • 相关阅读:
    一道面试题引发的对JavaScript类型转换的思考
    微信后台开发第一步:nodeJS+express接入微信后台详细教程
    class命名
    了解真实的『REM』手机屏幕适配
    js刷新框架子页面的七种方法代码
    移动前端开发之viewport的深入理解
    移动web点5像素的秘密
    refactor window_x64微信小程序环境搭建
    JSON API免费接口
    webpack
  • 原文地址:https://www.cnblogs.com/apebro/p/12605874.html
Copyright © 2011-2022 走看看