Фильтры — это специальные функции в Vue.js 2.x, предназначенные для форматирования текста в шаблонах. Они применяются с помощью синтаксиса "pipe" (|) и позволяют трансформировать данные перед отображением.
Фильтры решают следующие задачи:
<template>
<div>
{{ message | capitalize }} <!-- Применение фильтра -->
{{ price | currency }} <!-- Цепочка фильтров: message | filterA | filterB -->
</div>
</template>
Vue.filter('capitalize', function(value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
export default {
filters: {
currency(value) {
return '$' + value.toFixed(2)
}
}
}
Vue.filter('formatDate', function(value) {
if (!value) return ''
return new Date(value).toLocaleDateString()
})
Vue.filter('truncate', function(value, length = 30) {
if (!value) return ''
if (value.length <= length) return value
return value.substring(0, length) + '...'
})
{{ date | formatDate('YYYY-MM-DD') }}
Реализация:
Vue.filter('formatDate', function(value, format) {
// Реализация форматирования по переданному формату
})
В Vue 3 фильтры были удалены. Вместо них рекомендуется:
<template>
<div>{{ formatCurrency(price) }}</div>
</template>
<script>
export default {
methods: {
formatCurrency(value) {
return '$' + value.toFixed(2)
}
}
}
</script>
Или с Composition API:
import { computed } from 'vue'
export default {
setup() {
const price = ref(10.5)
const formattedPrice = computed(() => `$${price.value.toFixed(2)}`)
return { formattedPrice }
}
}
Для новых проектов на Vue 3 рекомендуется использовать методы или вычисляемые свойства вместо фильтров, что делает код более явным и упрощает его поддержку.