Vue过滤器详解

在我看来过滤器其实就是处理数据的函数,Vue可以自定义过滤器,可用在两个地方:双花括号和v-bind表达式。v-bind是从2.1.0+才开始支持,小伙伴们可得注意了。
下面看下计算时间间隔的局部过滤器的例子:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="js/vue.js"></script>
    <title></title>
</head>
<body>

<div id="container">
    <p>开始时间:{{startTime}}</p>
    <p>结束时间:{{endTime}}</p>
    <p>间隔时间:{{startTime | intervalTime(endTime)}}</p>
</div>

<script>
    new Vue({
        el: '#container',
        data: {
         	startTime:'2019-12-12 06:06:06',
         	endTime:'2019-12-18 06:06:06',
        },
        filters:{
            intervalTime(startTime,endTime){
                let start=startTime.replace(/-/g,'/');
        		let end=endTime.replace(/-/g,'/');
        		let duration=new Date(end).getTime()-new Date(start).getTime(); //毫秒
        		let days=Math.floor(duration/1000/60/60/24);
       			let hours=Math.floor(duration%(1000*60*60*24)/1000/60/60);
        		let minutes=Math.floor(duration%(1000*60*60)/1000/60);
        		let seconds=duration%(1000*60)/1000
        		if(days==0){
          			return hours+'小时'+minutes+'分钟'+seconds+'秒';
        		}else{
          			return days+'天'+hours+'小时'+minutes+'分钟'+seconds+'秒'
        		}
            }
        }
    })
</script>

</body>
</html>

代码中,我们向过滤器传递了两个参数,而在渲染的时候,就会通过过滤器把结果渲染在标签中。
因为过滤器是 JavaScript 函数,所以可以接收参数:

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

这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 ‘arg1’ 作为第二个参数,表达式 arg2 的值作为第三个参数。
至于全局过滤器也很简单,我们只需要在main.js中:

Vue.filter('intervalTime',function(startTime,endTime){
     			let start=startTime.replace(/-/g,'/');
        		let end=endTime.replace(/-/g,'/');
        		let duration=new Date(end).getTime()-new Date(start).getTime(); //毫秒
        		let days=Math.floor(duration/1000/60/60/24);
       			let hours=Math.floor(duration%(1000*60*60*24)/1000/60/60);
        		let minutes=Math.floor(duration%(1000*60*60)/1000/60);
        		let seconds=duration%(1000*60)/1000
        		if(days==0){
          			return hours+'小时'+minutes+'分钟'+seconds+'秒';
        		}else{
          			return days+'天'+hours+'小时'+minutes+'分钟'+seconds+'秒'
        		}
})

调用和局部的是一样的。至于全局还是局部这个大家可以按照自己的需求来决定。
下面来看下v-bind的使用方法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="js/vue.js"></script>
    <title></title>
</head>
<body>

<div id="container">
  <div :id="'good' | rever">66666666</div> 
</div>

<script>
    new Vue({
        el: '#container',
        data: {
         	startTime:'2019-12-12 06:06:06',
         	endTime:'2019-12-18 06:06:06',
        },
        filters:{
            rever(id){
  				  return id.split('').reverse().join('');
            }
        }
    })
</script>

</body>
</html>

注意:当全局过滤器和局部过滤器重名时,会采用局部过滤器。

好了,就是这么简单而且简单。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值