vue过滤器的作用以及使用方法

 分类:vue教程时间:2022-07-04 07:30:45点击:

Vue的过滤器,主要作用是将一个字符串(入参)通过一个过滤器函数来改变字符串的格式化显示,对原数据是没有影响的,主要是用在显示上。

  1. 全局过滤器

定义全局过滤器,在所有引用此js的html的vm实例中都有效。

Vue.filter('过滤器名称',function(被过滤的参数,其他参数...){
   代码;   return 返回值
})

使用

<div id="app">
  {{msg | 过滤器名称(参数...)}}
</div>

全局过滤器的实例:定义一个日期的全局过滤器

window.onload = function () {
               //pattern格式化的样式,默认空字符,全部输出
               Vue.filter('dateFormat',function(datestr,pattern=""){
                   var dt = new Date(datestr);
                   var year = dt.getFullYear();
                   var month = dt.getMonth()+1;  //月份是从0开始的,因此要+1
                   month = month < 10 ? '0'+month : month;  //不足2位补足0
                   var day = dt.getDate();
                   day = day < 10 ? '0'+day : day;
                   var hour = dt.getHours();
                   hour = hour < 10 ? '0'+hour : hour;
                   var seconds = dt.getSeconds();
                   seconds = seconds < 10 ? '0'+seconds : seconds;
                   var minutes = dt.getMinutes();
                   minutes = minutes < 10 ? '0'+minutes : minutes;
        
                   if(pattern === 'yyyy-mm-dd'){
                       return year + "-" + month  + "-" + day;
                   }else {
                       return year  + "-" + month  + "-" + day + " " + hour  + ":" + seconds  + 
                                    ":" + minutes;
                   }
               })
              var vm = new Vue({
                  el:"#app",
                  data:{
                      cDate : new Date()
                  }
              })
        
        
       <div id="app">
         <h3>{{cDate | dateFormat()}}</h3>
       </div>
        
       <div id="app">
         <h3>{{cDate | dateFormat('yyyy-mm-dd')}}</h3>
       </div>

2.私有过滤器

定义在vm实例中,只在当前el元素的标签中有效

window.onload = function () {
               var vm = new Vue({
                   el: "#app",
                   data: {
                       cDate: new Date()
                   },
                   filters: {
                       dateFormat: function (datestr, pattern = "") {
                           var dt = new Date(datestr);
                           var year = dt.getFullYear();
                           var month = dt.getMonth() + 1;  //月份是从0开始的,因此要+1
                           month = month < 10 ? '0' + month : month;  //不足2位补足0
                           var day = dt.getDate();
                           day = day < 10 ? '0' + day : day;
                           var hour = dt.getHours();
                           hour = hour < 10 ? '0' + hour : hour;
                           var seconds = dt.getSeconds();
                           seconds = seconds < 10 ? '0' + seconds : seconds;
                           var minutes = dt.getMinutes();
                           minutes = minutes < 10 ? '0' + minutes : minutes;
        
                           if (pattern === 'yyyy-mm-dd') {
                               return year + "-" + month + "-" + day;
                           } else {
                               return year + "-" + month + "-" + day + " " + hour + ":" + 
                                      seconds + ":" + minutes;
                           }
                       }
                   }
               })
           }
        
       <div id="app">
         <h3>{{cDate | dateFormat()}}</h3>
       </div>
        
       <div id="app">
         <h3>{{cDate | dateFormat('yyyy-mm-dd')}}</h3>
       </div>

filter只在{{}}和v-bind中有效,此外,filter可以链式调用 {{ msg | filterA | filterB }}

str.padStart(maxlength,fillstr):字符最大长度,不足在之前添加字符

str.padEnd(maxlength,fillstr):字符最大长度,不足在之后添加字符

改写上面的逻辑:

var month = (dt.getMonth()+1).toString().padStart(2,'0');
var day = dt.getDate().toString().padStart(2,'0');
var hour = dt.getHours().toString().padStart(2,'0');
var seconds = dt.getSeconds().toString().padStart(2,'0');
var minutes = dt.getMinutes().toString().padStart(2,'0');


除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: