Вы можете создать свойство computed
, которое будет возвращать вам фильтрованный массив на основе примененного запроса / фильтров.
Другое свойство computed
будет возвращать вам длину фильтрованного массива, т.е. рассчитывать, чтобы показать на DOM.
new Vue({
el: '#app',
data: {
posts: [
{ title: 'apple is best fruit' },
{ title: 'orange is 2020 best fruit' },
{ title: 'apples are sweeter than oranges in 2020' }
],
query: ''
},
computed: {
getFilteredPosts () {
return this.posts.filter(post => post.title.includes(this.query))
},
getFilteredPostsCount () {
return this.getFilteredPosts.length
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input placeholder="search for `apple`" v-model="query"/>
<br/><br/>
Filtered posts count: {{ getFilteredPostsCount }}
<br/><br/>
Filtered posts:
<li v-for="(post, i) in getFilteredPosts" :key="i">
{{ post.title }}
</li>
</div>