Vue过滤器

1.全局过滤器

Vue允许你自定义过滤器,可被用作一些常见文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在JavaScript 表达式的尾部,由 "管道"符指示。
过滤器的语法
过滤器中的function,第一个参数,已经被规定死了,永远都是过滤器管道符前面传递过来的数据。

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

过滤器调用时候的格式,{{name | 过滤器的名称}}

例子1:使用过滤器格式化输出日期。

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
<body>
  <div id='app'>
    <!--这里调用了2个过滤器-->
    <p>{{dt | dateFormat('') | test}}</p>
  </div>
</body>
<script src="../lib/vue.js"></script>
<script>
  Vue.filter('dateFormat',function(dateStr,pattern=""){
    //根据给定的字符串,得到特定的时间格式。
    var dt = new Date(dateStr)
    var y = dt.getFullYear()
    var m = dt.getMonth()+1
    var d = dt.getDate()
    
    if(pattern && pattern.toLowerCase() == 'yyyy-mm-dd'){
      return `${y}-${m}-${d}`
    } else {
      var hh = dt.getHours();
      var min = dt.getMinutes();
      var ss = dt.getSeconds();
      return `${y}-${m}-${d} ${hh}:${min}:${ss}`
    }
  });
  Vue.filter('test',function(msg){
    return msg + "-----";
  });
  var vm = new Vue({
    el:'#app',
    data:{
      dt:new Date(),
    },
  });
</script>
</html>

2.私有过滤器

私有过滤器定义在Vue对象内部,只能由定义它的这个Vue对象使用。

定义私有过滤器,过滤器由2个条件,【过滤器名称和处理函数】。

过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候优先调用私有过滤器。

例子2:同时定义全局过滤器和私有过滤器。

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
<body>
  <div id='app'>
    这儿使用全局过滤器
    <p>{{dt | dateFormat('')}}</p>
  </div>
  <div id="app2">
    这儿使用私有过滤器
    <p>{{dt | dateFormat('')}}</p>
  </div>
</body>
<script src="../lib/vue.js"></script>
<script>
  //全局过滤器
  Vue.filter('dateFormat',function(dateStr,pattern=""){
    //根据给定的字符串,得到特定的时间格式。
    var dt = new Date(dateStr)
    var y = dt.getFullYear()
    var m = dt.getMonth()+1
    var d = dt.getDate()
    
    if(pattern && pattern.toLowerCase() == 'yyyy-mm-dd'){
      return `${y}-${m}-${d}`
    } else {
      var hh = dt.getHours();
      var min = dt.getMinutes();
      var ss = dt.getSeconds();
      return `${y}-${m}-${d} ${hh}:${min}:${ss}`
    }
  });
  var vm = new Vue({
    el:'#app',
    data:{
      dt:new Date(),
    },
  });
  var vm2 = new Vue({
    el:'#app2',
    data:{
      dt:new Date(),
    },
    //定义私有过滤器
    filters:{
      dateFormat:function(dateStr,pattern){
        var dt = new Date(dateStr)
        var y = dt.getFullYear()
        var m = dt.getMonth()+1
        var d = dt.getDate()
        
        if(pattern && pattern.toLowerCase() == 'yyyy-mm-dd'){
          return `${y}-${m}-${d}`
        } else {
          var hh = dt.getHours();
          var min = dt.getMinutes();
          var ss = dt.getSeconds();
          return `${y}-${m}-${d} ${hh}:${min}:${ss}~~~`
        }
      }
    }
  })
</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值