开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
过滤器顾名思义,是用来过滤数据的。其实在前端页面中还是比较常用的,能够帮我们简化代码,使模板变得更加清楚,我们这篇文章主要就是针对过滤器的使用来介绍的。
自定义过滤器
过滤器是用来过滤数据的,一般用在模板中,主要是两个地方:插值语法中和v-bind表达式中。 自定义过滤器根据局部和全局可以分为局部过滤器和全局过滤器
1. 全局过滤器
全局过滤器定义好后,整个Vue实例都可以使用,也就是说全局过滤器可以在所有的组件中使用。
Vue.filter('formateTime', function (value) {
let date = new Date(value)
let year = date.getFullYear()
let month = date.getMonth() + 1
month = month < 10 ? `0${month}` : month
let day = date.getDate()
day = day < 10 ? `0${day}` : day
let hours = date.getHours()
hours = hours < 10 ? `0${hours}` : hours
let minutes = date.getMinutes()
minutes = minutes < 10 ? `0${minutes}` : minutes
let seconds = date.getSeconds()
seconds = seconds < 10 ? `0${seconds}` : seconds
const formatStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
return formatStr
})
2. 局部过滤器
局部过滤器就是在对应的组件中定义的,那么这个过滤器就只能在组件里面使用了,别的组件是不能使用的
filters: {
formateTime (value) {
let date = new Date(value)
let year = date.getFullYear()
let month = date.getMonth() + 1
month = month < 10 ? `0${month}` : month
let day = date.getDate()
day = day < 10 ? `0${day}` : day
let hours = date.getHours()
hours = hours < 10 ? `0${hours}` : hours
let minutes = date.getMinutes()
minutes = minutes < 10 ? `0${minutes}` : minutes
let seconds = date.getSeconds()
seconds = seconds < 10 ? `0${seconds}` : seconds
const formatStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
return formatStr
}
}
过滤器的基本用法
过滤器的使用在js表达式的尾部,由管道符号('|', 一定要和'||'区分开)指示。管道符前面的变量就作为过滤器的参数。
用在插值语法中
<div class="hello">
<div>时间:{{timeStr | formateTime}}</div>
</div>
效果如下:
过滤器不会改变原来的数据,它只是返回了新的数据
用在v-bind表达式中
<div v-bind:time="timeStr | formateTime">时间</div>
效果如下:
过滤器的链式用法
过滤器是可以串联的,也就是说可以像下面这样使用
{{ message | filterA | filterB }}
filterA被定义为单个参数的过滤器函数,表达式message作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数filterB, 将filterA的结果传递到filterB中.
<template>
<div class="hello">
<div>时间:{{timeStr | formateTime | subtring}}</div>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
timeStr: new Date().getTime()
}
},
filters: {
formateTime (value) {
let date = new Date(value)
let year = date.getFullYear()
let month = date.getMonth() + 1
month = month < 10 ? `0${month}` : month
let day = date.getDate()
day = day < 10 ? `0${day}` : day
let hours = date.getHours()
hours = hours < 10 ? `0${hours}` : hours
let minutes = date.getMinutes()
minutes = minutes < 10 ? `0${minutes}` : minutes
let seconds = date.getSeconds()
seconds = seconds < 10 ? `0${seconds}` : seconds
const formatStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
return formatStr
},
subtring (value) {
return value.substring(0, 4)
}
},
methods: {
}
}
</script>
效果如下:
过滤器传多个参数
过滤器其实就是函数,它除了可以接受默认的管道符前面的参数外,它还可以自定义其他的参数与。
{{message | filterA('arg1', arg2)}}
filterA被定义为接收三个参数的过滤器函数。其中message的值作为第一个参数,普通字符串'arg1'作为第二个参数,表达式arg2的值作为第三个参数
过滤器和计算属性的区别
通过前面我们对计算属性的学习,以及这篇文章我们对过滤器的介绍,可以看出它们的区别:
- 计算属性是依赖于组件的,只能在对应的组件中使用,而过滤器既可以是局部的,也可以是全局的
- 计算属性不能传额外的参数,而过滤器可以自定义若干参数
- 计算属性可以缓存,过滤器不能缓存
- 计算属性更多地是偏向于属性,而过滤器更偏向于方法