【发布时间】:2021-07-05 10:28:12
【问题描述】:
我正在使用 Vue.js 3,并且在这种情况下,我有一个用于一个数组的过滤器类型,但是如何与另一个数组连接,例如这里的一个类别?我尝试了同样的方法,但我只得到了重复
https://stackoverflow.com/users/3330981/tauzn 你可以检查一下,如果你 有时间吗?
这是我的代码
<template>
<div>
<form>
<input type="checkbox" name="drama" v-model="filters.drama"/>
<label for="drama">drama</label>
<input type="checkbox" name="comedy" v-model="filters.comedy"/>
<label for="comedy">comedy</label>
<input type="checkbox" name="horror" v-model="filters.horror"/>
<label for="horror">horror</label>
<input type="checkbox" name="polovno" v-model="filters.new"/>
<label for="new">new</label>
</form>
<div v-for="(movie) in filteredMovies" :key="movie.title">
<div>
{{ movie.title }}
</div>
</div>
</div>
</template>
<script>
export default {
data: ()=>({
filters: {
horror: true,
comedy: true,
drama: true,
new:true,
old:true,
},
movies: [
{ title: 'Movia A', genres: ['horror'], category:['new']},
{ title: 'Movia B', genres: ['comedy'], category:['old']},
{ title: 'Movia C', genres: ['drama'], category:['new']},
{ title: 'Movia D',genres: ['horror'], category:['new']},
]
}),
computed: {
filteredMovies(){
return this.movies.filter( movie => {
let selectedGenres = Object.keys(this.filters).filter(item => this.filters[item] === true)
return movie.genres.some(item => selectedGenres.includes(item))
})
},
filteredMoviesByCategory(){
return this.movies.filter( movie => {
let selectedCategory = Object.keys(this.filters).filter(item => this.filters[item] === true)
return movie.category.some(item => selectedCategory.includes(item))
})
}
},
}
</script>
所以我有复选框,这对于流派过滤非常有效,但是在这种情况下如何将其连接到另一个数组?我是 Vue.js 的新手,这对我有很大帮助
【问题讨论】:
-
是您选择以这种方式制作新/旧数据,还是来自该格式。如果一个类别只能有两个值的一个交替,它应该是布尔值,如 isNew true/false。将其设为布尔值将使事情变得更容易,尤其是当您的过滤器变大时。如果 category 可以有任何其他值,请添加更多。
-
您想显示只匹配类型和类别的电影吗?那么,恐怖+旧会什么都不会给?恐怖+喜剧+老电影B?
-
@MattEllen 是的,这正是我想要的
标签: javascript vue.js filtering