Технически, фильтр можно вызвать напрямую через $options.filters.nameOfFilter
:
<div v-if="$options.filters.timeconverter(time) > Date.now()">
{{ time | timeconverter }}<span>min</span>
</div>
Vue.filter('timeconverter', value => moment(value).valueOf())
new Vue({
el: '#app',
data: () => ({
time: '04 Dec 2025 00:12:00 GMT'
}),
mounted() {
console.log('timeconverter', this.$options.filters.timeconverter(this.time))
}
})
<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
<script src="https://unpkg.com/moment@2.24.0/moment.js"></script>
<div id="app">
<input v-model="time" placeholder="time">
<div v-if="$options.filters.timeconverter(time) > Date.now()">
{{ time | timeconverter }}<span>min</span>
</div>
<div v-else>Nothing to see</div>
</div>
Или с вычисленными подпорками, чтобы избежать запуска фильтра дважды (один раз в v-if
и снова внутри <div>
):
<template>
<div v-if="filteredTime > Date.now()">
{{ filteredTime }}<span>min</span>
</div>
</template>
<script>
export default {
computed: {
filteredTime() {
return this.$options.filters.timeconverter(this.time)
}
}
}
</script>
Vue.filter('timeconverter', value => moment(value).valueOf())
new Vue({
el: '#app',
data: () => ({
time: '04 Dec 2025 00:12:00 GMT'
}),
computed: {
filteredTime() {
return this.$options.filters.timeconverter(this.time)
}
}
})
<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
<script src="https://unpkg.com/moment@2.24.0/moment.js"></script>
<div id="app">
<input v-model="time" placeholder="time">
<div v-if="filteredTime > Date.now()">
{{ filteredTime }}<span>min</span>
</div>
<div v-else>Nothing to see</div>
</div>