接手一个Vue2老项目,模板里写着{{ amount | money }},这就是vue filter,管道式过滤器:数据先过一遍函数再渲染出来。Vue3把这个功能整个移除了,老项目得会看会改,新项目别再写。
基本写法
全局注册用Vue.filter('money', function(v){ return v.toFixed(2) }),组件内部用filters选项注册局部过滤器。模板里{{ price | money }}这样调用,还能串管道:{{ price | money | unit }},前一个的输出作为后一个的输入,执行顺序从左到右。过滤器只在视图层生效,不会改动data里的原始数据。全局注册一般写在main.js里,并且要在new Vue实例化之前执行,晚了就注册不上。
典型使用场景
常见活儿:金额千分位、时间戳转日期、状态码转文案、首字母大写。过滤器的第一个参数永远是管道前的值,后面还能继续传参,比如{{ t | date('yyyy-MM-dd') }}。记住它的定位:只管显示格式化,业务逻辑别塞进来,复杂转换放computed更合适。举个千分位的思路:值先toFixed(2),再用正则给整数部分加逗号,十几行搞定,全项目当过滤器复用。
Vue3里拿什么替代
过滤器在Vue3被移除,官方建议换成computed或方法调用:{{ formatMoney(price) }},逻辑一样,管道换成函数写法。迁移老项目的路子:全局过滤器集中挪到utils文件里导出,组件内过滤器改写进methods,模板里竖线语法逐个替换。改完全局搜一下竖线,防止漏掉v-bind里用到的过滤器。需要在模板里直接调的,也可以挂到app.config.globalProperties上,效果和原来的全局过滤器接近。
实操结论:Vue2项目里简单格式化继续用过滤器没毛病,往Vue3迁移时一律改成computed和methods,新代码里别再出现竖线过滤器。