Vue 3 在 uni-app 中彻底移除 filters 是因官方编译器已删除其解析逻辑,模板中 {{ value | format }} 会报错或忽略;filters 选项无效,$filters 仅支持方法挂载但不恢复 | 语法;推荐优先使用计算属性或独立工具函数替代,确保响应式、缓存与类型安全。

Vue 3 在 uni-app 中彻底移除了 filters,不存在“开启支持”或“兼容开关”,必须改写逻辑。
为什么 filters 在 Vue 3 + uni-app 里完全无效
nvue 页面和小程序端都基于 Vue 3 运行时,而 Vue 3 编译器(@vue/compiler-sfc)从源头删掉了 filters 解析逻辑——模板里写 {{ value | format }} 会直接报错或静默忽略。这不是 uni-app “没适配好”,是 Vue 官方决定移除的底层能力。
-
filters不再出现在组件选项中,export default { filters: { ... } }写了也无 effect -
app.config.globalProperties.$filters只能让方法挂载上去,但模板语法|仍不被识别 - uView@1.8.4 等老 UI 库依赖的
$filter全局对象,本质是手动模拟过滤器调用,不是真正恢复了 filter 语法
替代方案:优先用计算属性,而非全局挂载方法
计算属性天然具备缓存、响应式、可复用等优势,比在模板里反复调用方法更可靠,尤其适合格式化日期、金额、状态文本等高频场景。
将静态 Vue 页面(index.vue)改造为动态页面(Custom.vue);稿源仅限 index.vue、其引用的 CSS 与资源路径,禁止参考仓库内其他文件。Invoke when user wants to transform a static Vue page into a dynamic data-driven page with Element UI components.
- 避免在
setup()里重复写formatDate(value)调用,直接声明const formattedTime = computed(() => formatDate(time.value)) - 对多处共用的格式化逻辑,抽成独立函数(如
utils/date.js),然后在各组件里import { formatDate } from '@/utils/date' - 不要把格式化函数塞进
globalProperties后再模板里写{{ $filters.formatDate(time) }}—— 这只是绕开语法限制的权宜之计,增加调用栈且无缓存
uView 等库的 $filter 怎么安全沿用
如果你已接入 uView@1.8.4 或类似依赖 $filter 的旧库,不能直接删掉,但也不能指望它“自动工作”。必须显式调用,且只限于 JS 层。
立即学习“前端免费学习笔记(深入)”;
- 模板中禁用
|语法,全部改为{{ $u.timeFormat(time, 'YYYY-MM-DD') }}这类显式调用 - 确认
main.js中已按 uView 文档正确注入:app.config.globalProperties.$u = $u,否则$u未定义 -
$u.timeFormat等函数内部仍是普通 JS 方法,不依赖 Vue 运行时,所以可在onLoad、onPullDownRefresh等生命周期里安全使用 - 注意:nvue 页面里慎用
$u提供的样式类或组件,它们多数为 WebView 专属,nvue 渲染下会失效甚至崩溃
真正麻烦的不是“怎么替换 filter”,而是那些散落在 dozens 个 .vue 文件里的 | currency | capitalize | timeAgo —— 它们得一个个手动改成 computed 或 methods 调用。别想着正则批量替换,有些 filter 带参数、嵌套调用,必须人工核对逻辑。

















