当前位置:首页 > VUE

vue实现筛选电影

2026-01-17 21:23:27VUE

使用Vue实现电影筛选功能

在Vue中实现电影筛选功能可以通过以下方法完成:

数据准备 创建包含电影信息的数组,每个电影对象包含标题、类型、评分等属性:

data() {
  return {
    movies: [
      { title: '电影A', genre: '动作', rating: 4.5 },
      { title: '电影B', genre: '喜剧', rating: 3.8 },
      { title: '电影C', genre: '科幻', rating: 4.2 }
    ],
    filters: {
      genre: '',
      minRating: 0
    }
  }
}

计算属性筛选 使用计算属性根据筛选条件过滤电影:

computed: {
  filteredMovies() {
    return this.movies.filter(movie => {
      const genreMatch = !this.filters.genre || 
                        movie.genre === this.filters.genre
      const ratingMatch = movie.rating >= this.filters.minRating
      return genreMatch && ratingMatch
    })
  }
}

模板渲染 在模板中显示筛选控件和结果:

vue实现筛选电影

<div>
  <select v-model="filters.genre">
    <option value="">所有类型</option>
    <option value="动作">动作</option>
    <option value="喜剧">喜剧</option>
  </select>

  <input type="number" v-model="filters.minRating" min="0" max="5" step="0.1">

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

进阶实现方案

使用Vuex管理状态 对于大型应用,可以使用Vuex集中管理电影数据和筛选条件:

// store.js
export default new Vuex.Store({
  state: {
    movies: [...],
    filters: {
      genre: '',
      minRating: 0
    }
  },
  getters: {
    filteredMovies: state => {
      return state.movies.filter(/* 筛选逻辑 */)
    }
  }
})

添加更多筛选条件 扩展筛选功能支持多条件查询:

vue实现筛选电影

filters: {
  genres: [],
  yearRange: [1990, 2020],
  keywords: ''
}

性能优化 对于大量数据,考虑使用虚拟滚动或分页加载:

<virtual-list :size="50" :remain="8">
  <div v-for="movie in filteredMovies" :key="movie.id">
    <!-- 电影项内容 -->
  </div>
</virtual-list>

样式与交互增强

添加过渡效果 使用Vue的过渡系统让筛选结果平滑变化:

<transition-group name="fade" tag="div">
  <div v-for="movie in filteredMovies" :key="movie.id">
    <!-- 内容 -->
  </div>
</transition-group>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

响应式设计 确保筛选界面在不同设备上表现良好:

.filter-container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

@media (max-width: 768px) {
  .filter-container {
    flex-direction: column;
  }
}

以上实现方案可根据具体需求进行调整和扩展,核心思路是通过Vue的响应式系统和计算属性实现动态筛选功能。

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

相关文章

vue响应式实现

vue响应式实现

Vue 响应式实现原理 Vue 的响应式系统基于 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)实现,通过数据劫持和依赖收集实现数据变化时的自动更新。…

vue实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Card…

vue实现静态查询

vue实现静态查询

Vue 实现静态查询 在 Vue 中实现静态查询通常指不依赖后端接口,直接在前端处理数据筛选或搜索功能。以下是几种常见实现方式: 使用计算属性过滤数据 通过计算属性对静态数据进行筛选,适合简单查询…

vue实现路由导航

vue实现路由导航

路由导航的实现方式 在Vue中,路由导航主要通过Vue Router实现。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。 基本路由配置 安装Vue Router…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <di…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…