当前位置:首页 > 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实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-pdf…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

vue实现tab

vue实现tab

Vue 实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 和 v-show 指令 通过绑定 v-if 或 v-show 来…

vue实现拉伸

vue实现拉伸

Vue 实现元素拉伸功能 在Vue中实现元素的拉伸(拖拽调整大小)功能,可以通过监听鼠标事件结合CSS样式来实现。以下是两种常见实现方式: 使用原生事件监听 创建可拉伸的组件需要处理鼠标按下、移动和…