先来看一下官方文档:vue官方文档之filter
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
你可以在一个组件的选项中定义本地的过滤器:
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
或者在创建 Vue 实例之前全局定义过滤器:
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
在项目中一般会定义一个全局过滤器,新建一个utils文件夹,创建一个filter.js:
/**********
* 格式化时间*****************/
const formatDateFilter = (value, fmt) => {
if (value === undefined) {
return
}
// if(window.navigator.userAgent.indexOf("MSIE")>=1){
// }
const date = new Date(value)
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length)
)
}
const o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
}
for (const k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
const str = o[k] + ''
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? str : padLeftZero(str)
)
}
}
return fmt
}
function padLeftZero (str) {
return ('00' + str).substr(str.length)
}
export { formatDateFilter };
在main.js中:
import * as filters from '@/utils/filter';
Object.keys(filters).forEach(key => { // 注册自定义过滤器
Vue.filter(key, filters[key])
})
在页面组件中使用:
<div>
{{timeStamp | formatDateFilter('yy-MM-dd hh:mm:ss')}}
</div>