前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue--过滤器(私有,全局)

vue--过滤器(私有,全局)

作者头像
eadela
发布2019-12-16 11:48:52
4090
发布2019-12-16 11:48:52
举报
文章被收录于专栏:eadelaeadela

过滤器

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

私有过滤器

  1. HTML元素:
代码语言:javascript
复制
​
<td>{{item.ctime | dataFormat('yyyy-mm-dd')}}</td>
​
代码语言:javascript
复制
<!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 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
      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>
代码语言:javascript
复制
  1. 私有 filters 定义方式:
代码语言:javascript
复制
​
filters: { // 私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使用
​
    dataFormat(input, pattern = "") { // 在参数列表中 通过 pattern="" 来指定形参默认值,防止报错
​
      var dt = new Date(input);
​
      // 获取年月日
​
      var y = dt.getFullYear();
​
      var m = (dt.getMonth() + 1).toString().padStart(2, '0');
​
      var d = dt.getDate().toString().padStart(2, '0');
​
​
​
      // 如果 传递进来的字符串类型,转为小写之后,等于 yyyy-mm-dd,那么就返回 年-月-日
​
      // 否则,就返回  年-月-日 时:分:秒
​
      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='')来填充字符串;

全局过滤器

代码语言:javascript
复制
​
// 定义一个全局过滤器
​
Vue.filter('dataFormat', function (input, pattern = '') {
​
  var dt = new Date(input);
​
  // 获取年月日
​
  var y = dt.getFullYear();
​
  var m = (dt.getMonth() + 1).toString().padStart(2, '0');
​
  var d = dt.getDate().toString().padStart(2, '0');
​
​
​
  // 如果 传递进来的字符串类型,转为小写之后,等于 yyyy-mm-dd,那么就返回 年-月-日
​
  // 否则,就返回  年-月-日 时:分:秒
​
  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}`;
​
  }
​
});
​

注意:当有局部和全局两个名称相同的过滤器时候,会以就近原则进行调用,即:局部过滤器优先于全局过滤器被调用!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 过滤器
    • 私有过滤器
      • 全局过滤器
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档