Vue.js过滤器

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue.js过滤器相关的知识,希望对你有一定的参考价值。

文章目录

过滤器

概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式

过滤器应该被添加在 javascript 表达式的尾部,由“管道”符指示;

定义与调用

过滤器定义时候的格式

Vue.filter('过滤器的名称', function (参数1, 参数2, ...) 
		...
   )

过滤器调用时候的格式

 name | 过滤器的名称  

小案例:

没有过滤器

加上过滤器

<!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">
    <!-- 后面的test是多个过滤器的调用方式 -->
    <p> msg | msgFormat('疯狂', '咕咕嘎嘎') | test </p>
  </div>

  <script>
    // 定义一个 Vue 全局的过滤器,名字叫做  msgFormat
    Vue.filter('msgFormat', function (msg, arg, arg2) 
      // 字符串的  replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
      return msg.replace(/单纯的/g, arg + 'De '+arg2)
    )

    // 多次调用过滤器
    Vue.filter('test', function (msg) 
      return msg + '============我们不一样'
    )


    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue(
      el: '#app',
      data: 
        msg: '曾经我还是一个单纯的孩子,无比单纯,单纯的我,就像大单纯一样单纯,我问:谁是世界上最单纯的男人?'
      ,
      methods: 
    );
  </script>
</body>

</html>

私有过滤器

  1. HTML元素:
<td>item.ctime | dataFormat('yyyy-mm-dd')</td>
  1. 私有 filters 定义方式:

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=‘’)来填充字符串;

全局过滤器


// 定义一个全局过滤器
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`;
  
);

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

以上是关于Vue.js过滤器的主要内容,如果未能解决你的问题,请参考以下文章

04Vue.js---自定义过滤器

Vue入门到精通学习总结

Vue中,过滤器的使用方法!

[Vue] : 过滤器

Vue——过滤器

Vue 过滤