Vue 2 Options API 的 filters 选项用于模板中轻量格式化日期,如时间戳转“2024-06-15 14:30:22”,不修改原始数据;支持组件内定义和全局注册,但 Vue 3 已移除该特性。
Vue Options API 中的 filters 选项可用于在模板中简洁地格式化表格里的日期数据,比如把时间戳或 Date 对象转成 2024-06-15 14:30:22 这类可读格式。它不修改原始数据,只影响视图层显示,适合轻量、复用性强的格式化场景。
在组件的 export default 配置对象中,直接声明 filters 对象,每个函数接收第一个参数为待处理值,后续参数为模板中传入的额外参数:
dateFmt),模板中用 {{ timestamp | dateFmt('YYYY-MM-DD HH:mm:ss') }}
new Date(invalid) 返回 Invalid Date
| dateFmt('MM/DD/YYYY') → 函数中 format 就是该字符串对 <el-table> 或原生 <table> 的列内容,直接在插值或 v-bind 中调用过滤器:
<el-table-column prop="createTime" :formatter="(_, __, row) => row.createTime | dateFmt('YYYY-MM-DD')"></el-table-column>(注意::formatter 是方法,不能直接写管道符;需配合计算属性或方法封装)<template #default="{ row }">{{ row.createTime | dateFmt('YYYY-MM-DD HH:mm') }}</template>
v-bind 绑定文本类属性(如 title),也可用::title="row.updateTime | dateFmt('YYYY年MM月DD日')"
如果多个组件都要格式化日期,推荐在 main.js 或入口文件中全局注册:
Vue.filter('dateFmt', (value, format = 'YYYY-MM-DD HH:mm:ss') => { ... })filters
虽然 filters 写法简洁,但有几点必须留意:
v-if/v-for 等指令中使用(仅限插值和 v-bind)this),所以不能依赖响应式数据或 methods —— 如需动态格式(如用户偏好),改用计算属性或方法dayjs 或 date-fns 封装成方法,而非塞进 filtercomputed 或工具函数