跳至内容

过滤器
已移除

概述

过滤器已从 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>

请注意,使用这种方法,您只能使用方法,不能使用计算属性,因为后者只有在单个组件的上下文中定义时才有意义。