Vue 的过滤器是一种文本格式化的工具,主要用于在模板中对插值表达式({{ }}
)和 v-bind
表达式的数据进行处理。过滤器通常用于对文本内容进行格式化,比如日期格式化、文本转换(如大写、小写)等。
过滤器可以通过全局方式注册,也可以在组件内部注册。以下是过滤器的基本使用方式:
// 全局注册过滤器
Vue.filter('formatDate', function(value) {
if (!value) return '';
const date = new Date(value);
return date.toLocaleDateString('en-US');
});
// 在模板中使用过滤器
<div>{{ createdAt | formatDate }}</div>
在这个例子中,formatDate
过滤器会将日期字符串格式化为美式日期格式。使用时,只需要在插值表达式后加上管道符号(|
)和过滤器名称即可。
你也可以在组件内定义局部过滤器,只在该组件中有效:
export default {
data() {
return {
amount: 1234.56
};
},
filters: {
currency(value) {
return '$' + value.toFixed(2);
}
},
template: '<div>{{ amount | currency }}</div>'
}
过滤器最常见的应用场景是对文本进行格式化。例如,你可能希望将所有用户输入的文本转换为大写、日期格式化、货币格式化等。
// 字符串转大写
Vue.filter('uppercase', function(value) {
return value.toUpperCase();
});
<!-- 使用大写过滤器 -->
<p>{{ 'hello world' | uppercase }}</p>
过滤器可以用于简化一些常见的显示逻辑。例如,在显示某个数据时,根据条件显示不同的内容。
// 根据布尔值返回对应状态
Vue.filter('statusText', function(value) {
return value ? 'Active' : 'Inactive';
});
<!-- 使用状态过滤器 -->
<p>{{ isActive | statusText }}</p>
数值的格式化也是过滤器的常见用途,比如将一个小数限制为两位小数,或者将数字格式化为货币格式。
// 保留两位小数
Vue.filter('toFixed', function(value, decimals) {
return Number(value).toFixed(decimals);
});
<!-- 使用 toFixed 过滤器 -->
<p>{{ 1234.567 | toFixed(2) }}</p>
过滤器不仅可以用在单个值的处理上,也可以用在列表上。比如,你可以使用过滤器来筛选出符合某些条件的列表项。
// 筛选出列表中的偶数
Vue.filter('evenNumbers', function(numbers) {
return numbers.filter(n => n % 2 === 0);
});
<!-- 使用 evenNumbers 过滤器 -->
<ul>
<li v-for="n in [1, 2, 3, 4, 5] | evenNumbers" :key="n">{{ n }}</li>
</ul>
在 Vue 3 中,过滤器已经被移除。Vue 团队建议使用方法(methods)或计算属性(computed properties)来替代过滤器的功能。虽然 Vue 2 中的过滤器非常方便,但在 Vue 3 中这种处理方式被认为不够明确,因此进行了移除。
过滤器在 Vue 2 中是一个非常强大的工具,适合用于格式化显示数据、处理显示逻辑以及筛选列表等场景。然而,在 Vue 3 中,过滤器被移除,开发者需要使用方法或计算属性来实现类似的功能。了解过滤器的用途和使用场景有助于在 Vue 2 项目中编写更加简洁、易读的代码,同时也能更好地过渡到 Vue 3。