过滤器 已移除
概述
过滤器已从 Vue 3.0 中移除,不再支持。
2.x 语法
在 2.x 中,开发者可以使用过滤器来应用常见的文本格式。
例如
html
<template>
<h1>Bank Account Balance</h1>
<p>{{ accountBalance | currencyUSD }}</p>
</template>
<script>
export default {
props: {
accountBalance: {
type: Number,
required: true
}
},
filters: {
currencyUSD(value) {
return '$' + value
}
}
}
</script>
虽然这看起来很方便,但它需要一个自定义语法,这打破了花括号内的表达式是“仅仅是 JavaScript”的假设,这既有学习成本,也有实现成本。
3.x 更新
在 3.x 中,过滤器已被移除,不再支持。我们建议用方法调用或计算属性来代替它们。
使用上面的例子,这里是一个如何实现它的例子。
html
<template>
<h1>Bank Account Balance</h1>
<p>{{ accountInUSD }}</p>
</template>
<script>
export default {
props: {
accountBalance: {
type: Number,
required: true
}
},
computed: {
accountInUSD() {
return '$' + this.accountBalance
}
}
}
</script>
迁移策略
我们建议用计算属性或方法来代替过滤器。
FILTERS
COMPILER_FILTERS
全局过滤器
如果您使用的是全局注册并在整个应用程序中使用的过滤器,那么在每个组件中用计算属性或方法替换它们可能不太方便。
相反,您可以通过 globalProperties 使您的全局过滤器对所有组件可用
js
// main.js
const app = createApp(App)
app.config.globalProperties.$filters = {
currencyUSD(value) {
return '$' + value
}
}
然后,您可以像这样修复使用此 $filters
对象的所有模板
html
<template>
<h1>Bank Account Balance</h1>
<p>{{ $filters.currencyUSD(accountBalance) }}</p>
</template>
请注意,使用这种方法,您只能使用方法,不能使用计算属性,因为后者只有在单个组件的上下文中定义时才有意义。