You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js实现按电影或剧集类型筛选展示内容的方法

问题原因

你原来的实现存在3个核心错误:

  1. 计算属性不能作为点击事件的回调函数使用,它是依赖响应式变量自动更新的,不需要主动触发
  2. 模板里遍历渲染用的是filteredMovies变量,但你没有定义对应的计算属性,写的SerieOrMovie计算属性完全没有被用到
  3. 筛选逻辑里你把type转成了全小写,却去匹配大写开头的Series,永远返回空结果

正确实现方案

第一步:新增响应式筛选状态

在你的data中新增筛选状态变量,用来记录当前选中的筛选类型:

data() {
  return {
    // 原有变量(Movies、search、amountFav等)保留,新增以下内容
    currentFilter: 'all' // 可选值 all / movie / series
  }
}

第二步:修改按钮点击绑定

把按钮的点击事件改成修改currentFilter的值:

<div class="NavbarContainer">
  <button @click="currentFilter = 'movie'">Movies</button>
  <button @click="currentFilter = 'series'">Series</button>
  <button id="FavoriteBtn">Favorites ({{amountFav}})</button>
  <input type="text" v-model="search" placeholder="Search..">
</div>

第三步:实现filteredMovies计算属性

你需要把筛选逻辑写到模板用到的filteredMovies计算属性里,同时兼容类型筛选和搜索框筛选:

computed:{
  filteredMovies() {
    // 先做类型筛选
    let list = this.Movies
    if (this.currentFilter === 'series') {
      list = list.filter(item => item.type.toLowerCase() === 'series')
    } else if (this.currentFilter === 'movie') {
      list = list.filter(item => item.type.toLowerCase() === 'movie')
    }
    // 叠加搜索关键词筛选
    if (this.search.trim()) {
      const keyword = this.search.trim().toLowerCase()
      list = list.filter(item => item.MovieName.toLowerCase().includes(keyword))
    }
    return list
  }
}

项目效果参考

项目截图


内容的提问来源于stack exchange,提问作者GunZz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:36:03