根据Vue 官方给出的解释,过滤器是可被用于一些常见的文本格式化的东西。过滤器可以在两个地方被使用,一个是在双花括号的插值表达式中和v-bind 表达式中(后者从2.1.0+开始支持)
- 过滤器不会改变原数据,而是生成了新的数据
// 在双花括号中使用 capitalize 为过滤器的名字 message 为需要过滤的文本
{{ message | capitalize }}
// 在 v-bind 中使用
<div v-bind:id="rawId | formatId"></div>
过滤器的定义分:
- 全局定义过滤器
- 本地定义过滤器
// 全局注册 ,在创建Vue 实例之前全局定义过滤器:
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
// 创建 Vue 实例之前定义过滤器
new Vue({
// ...
})
// 在一个组件中定义本地的过滤器
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
- 过滤器支持串联使用 如下:
{{ message | filterA | filterB }}
message 经过 过滤器 filterA 处理完的结果,会再被传入 过滤器 filterB 中进行处理
- 过滤器是JavaScript函数,可以接收多个参数:
{{ message | filterA('arg1', arg2) }}
这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。
时间过滤器
// 全局定义时间过滤器 返回值格式: 2020-02-08 13:12:15
Vue.filter('dateFormat', function( originVal ) {
const dt =new Date(originVal)
const y = dt.getFullYear()
const m = ( dt.getMonth() +1 + '' ).padStart(2,0)
const d = ( dt.getDate() + '' ).padStart(2,0)
const hh = ( dt.getHours() + '' ).padStart(2,0)
const mm = ( dt.getMinutes() + '' ).padStart(2,0)
const ss = ( dt.getSeconds() + '' ).padStart(2,0)
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})