vue中的过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号=>’|'指示。
使用:
<!-- 在双花括号中 -->
{{ msg | msgFormat}}
<!-- 在 `v-bind` 中 -->
<div :msg="msg| msgFormat"></div>
定义:
// 在创建根实例之前 即全局过滤器
Vue.filter('msgFormat', (msg) => { // msg 为过滤的数据
return msg.replace(/\s+/g,"")
})
// 在一个组件的选项中定义过滤器 即局部过滤器
filters: {
msgFormat: (msg) => { // msg 为过滤的数据
return msg.replace(/\s+/g,"")
}
}
以下是一些常用的过滤器,可放入工具函数模块中
vue.filter('dealSpace', (value) => { // 去空格
return value.replace(/\s+/g,"")
})
vue.filter('roundNum', (value, decimal) => { // 四舍五入
let p = Math.pow(10, decimal)
return Math.round(value * p) / p
})
vue.filter('floorNum', (value, decimal) => { // 向下取整
let p = Math.pow(10, decimal)
return Math.floor(value * p) / p
})
vue.filter('priceFormat', number => { // 将价格数字转化为xxx,xxx,xxx.xx格式
if (number === '' || number === null || number === 'null') {
return ''
}
number = Number(number).toFixed(2)
if (typeof number === 'number') {
number = '' + number
}
let integerStr = number.split('.')[0]
let decimalStr = number.split('.')[1]
let preStr = ''
if (decimalStr) {
if (decimalStr.length === 1) {
decimalStr = `.${decimalStr}0`
} else {
decimalStr = `.${decimalStr}`
}
} else {
decimalStr = '.00'
}
if (integerStr.indexOf(',') > -1) {
preStr = integerStr
} else {
let temp = []
let index = integerStr.length
while (index > 0) {
let start, end
if (index - 3 < 0) {
start = 0
} else {
start = index - 3
}
end = index
let s = integerStr.substring(start, end)
index -= 3
temp.push(s)
}
preStr = temp.reverse().join(',')
}
return `${preStr}${decimalStr}`
})
// 将时间戳转化为xxxx-xx-xx xx:xx:xx的时间格式
vue.filter('dateTime', timestamp => {
function format (number) {
return number.toString().padStart(2, '0')
}
const date = new Date(Number.parseInt(timestamp, 10))
const YYYY = date.getFullYear()
const MM = date.getMonth() + 1
const DD = date.getDate()
const hh = date.getHours()
const mm = date.getMinutes()
const ss = date.getSeconds()
return `${YYYY}-${format(MM)}-${format(DD)} ${format(hh)}:${format(mm)}:${format(ss)}`
})
注意:
1、 当有局部和全局两个名称相同的过滤器时候,会以就近原则进行调用,即:局部过滤器优先于全局过滤器被调用。
2、 一个表达式可以使用多个过滤器。过滤器之间需要用管道符“|”隔开。其执行顺序从左往右。