Цепочка фильтров — это последовательное применение нескольких фильтров к одному значению в шаблоне Vue.js (актуально для Vue 2.x). Каждый фильтр получает результат предыдущего фильтра как входное значение.
<template>
<div>
{{ message | filterA | filterB | filterC }}
</div>
</template>
filterA
) получает исходное значение message
filterB
) получает результат filterA
filterC
) получает результат filterB
Vue.filter('uppercase', function(value) {
if (!value) return ''
return value.toString().toUpperCase()
})
Vue.filter('reverse', function(value) {
if (!value) return ''
return value.toString().split('').reverse().join('')
})
Vue.filter('limit', function(value, length = 10) {
if (!value) return ''
if (value.length <= length) return value
return value.substring(0, length) + '...'
})
<template>
<div>
<!-- Применяем 3 фильтра последовательно -->
{{ text | uppercase | reverse | limit(15) }}
</div>
</template>
<script>
export default {
data() {
return {
text: 'Hello Vue Filters'
}
}
}
</script>
"Hello Vue Filters"
uppercase
: "HELLO VUE FILTERS"
reverse
: "SRETLIF EUV OLLEH"
limit(15)
: "SRETLIF EUV OL..."
Каждый фильтр в цепочке может получать свои аргументы:
{{ price | currency('USD') | padEnd(10) }}
Реализация фильтров:
Vue.filter('currency', function(value, symbol = '$') {
return symbol + value.toFixed(2)
})
Vue.filter('padEnd', function(value, length) {
return value.toString().padEnd(length, ' ')
})
null
, следующий получит null
Во Vue 3 фильтры удалены, но можно использовать методы или вычисляемые свойства:
<template>
<div>{{ formatPrice(price) }}</div>
</template>
<script>
export default {
methods: {
formatPrice(value) {
return this.padEnd(this.currency(value, 'USD'), 10)
},
currency(value, symbol) {
return symbol + value.toFixed(2)
},
padEnd(value, length) {
return value.toString().padEnd(length, ' ')
}
}
}
</script>
Или с Composition API:
import { computed } from 'vue'
export default {
setup() {
const price = ref(15.99)
const formattedPrice = computed(() => {
const withCurrency = `$${price.value.toFixed(2)}`
return withCurrency.padEnd(10, ' ')
})
return { formattedPrice }
}
}
Цепочки фильтров — это удобный способ организации потока данных в шаблоне, но важно соблюдать баланс между удобством и поддержкой кода.