当前位置:首页 > VUE

vue实现筛选电影

2026-03-10 03:08:27VUE

实现电影筛选功能

在Vue中实现电影筛选功能可以通过计算属性或方法对电影列表进行过滤。以下是一个完整的实现示例:

基础数据结构

假设电影数据存储在movies数组中,每个电影对象包含title,genre,year等属性:

data() {
  return {
    movies: [
      { id: 1, title: '肖申克的救赎', genre: '剧情', year: 1994, rating: 9.7 },
      { id: 2, title: '教父', genre: '犯罪', year: 1972, rating: 9.2 },
      // 更多电影数据...
    ],
    filters: {
      genre: '',
      year: '',
      minRating: 0
    }
  }
}

计算属性实现筛选

使用计算属性创建过滤后的电影列表:

computed: {
  filteredMovies() {
    return this.movies.filter(movie => {
      return (
        (this.filters.genre === '' || movie.genre === this.filters.genre) &&
        (this.filters.year === '' || movie.year.toString() === this.filters.year) &&
        (movie.rating >= this.filters.minRating)
      )
    })
  }
}

模板中的筛选控件

在模板中添加筛选表单:

<div class="filters">
  <select v-model="filters.genre">
    <option value="">所有类型</option>
    <option v-for="genre in uniqueGenres" :value="genre">{{ genre }}</option>
  </select>

  <select v-model="filters.year">
    <option value="">所有年份</option>
    <option v-for="year in uniqueYears" :value="year">{{ year }}</option>
  </select>

  <input type="range" v-model="filters.minRating" min="0" max="10" step="0.1">
  <span>最低评分: {{ filters.minRating }}</span>
</div>

<ul>
  <li v-for="movie in filteredMovies" :key="movie.id">
    {{ movie.title }} ({{ movie.year }}) - {{ movie.genre }} - 评分: {{ movie.rating }}
  </li>
</ul>

获取唯一值辅助计算属性

添加辅助计算属性获取唯一的类型和年份:

computed: {
  uniqueGenres() {
    return [...new Set(this.movies.map(movie => movie.genre))]
  },
  uniqueYears() {
    return [...new Set(this.movies.map(movie => movie.year))].sort((a, b) => b - a)
  }
}

高级筛选功能

对于更复杂的筛选需求,可以添加搜索框和排序功能:

data() {
  return {
    searchQuery: '',
    sortField: 'rating',
    sortDirection: 'desc'
  }
},
computed: {
  filteredMovies() {
    let result = this.movies
    if (this.searchQuery) {
      const query = this.searchQuery.toLowerCase()
      result = result.filter(movie => 
        movie.title.toLowerCase().includes(query) ||
        movie.genre.toLowerCase().includes(query)
      )
    }
    // 其他筛选条件...

    // 排序
    return result.sort((a, b) => {
      const modifier = this.sortDirection === 'asc' ? 1 : -1
      return a[this.sortField] > b[this.sortField] ? modifier : -modifier
    })
  }
}

性能优化

对于大型电影数据集,可以考虑:

vue实现筛选电影

  • 使用分页加载
  • 添加防抖处理搜索输入
  • 使用Web Worker进行繁重的计算
  • 考虑使用Vuex管理状态

这个实现提供了基本的电影筛选功能,可以根据具体需求进一步扩展和完善。

标签: 电影vue
分享给朋友:

相关文章

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,以下是常见的几种方法: 单文件组件 (SFC) 使用 .vue 文件,包含模板、脚本和样式三部分: <template>…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue电影功能实现

vue电影功能实现

Vue电影功能实现 数据获取与展示 使用Axios或Fetch API从电影API获取数据,例如TMDB或豆瓣API。在Vue组件的created或mounted生命周期钩子中发起请求,将返回的电影数…

vue 实现 input focus

vue 实现 input focus

实现 Input Focus 的方法 在 Vue 中实现 input 元素的聚焦可以通过以下几种方式完成。 使用 ref 和 $refs 通过 ref 属性标记 input 元素,然后在 Vue 实…