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

Vue 2中使用Watcher实现搜索栏筛选功能时内容全部消失的问题求助

Vue 2中使用Watcher实现搜索栏筛选功能时内容全部消失的问题求助

嘿,我一眼就揪出问题所在啦!你的watch监听函数里的filter回调没有返回判断结果,这就导致每次输入搜索内容时,filter都会认为所有国家都不匹配,最终filtered变成空数组,所以卡片全消失了。

问题根源

你用了带大括号的箭头函数,这种情况下必须显式使用return返回判断条件,否则函数默认返回undefined,而filter会把返回undefined的元素排除在外,自然就没有结果了。

修复方案

把watch里的代码改成下面这样(二选一即可):

方案1:显式return结果

watch: {
  search() {
    this.filtered = this.countries.filter(country => {
      // 加上return,返回判断逻辑的结果
      return country.name.common.toLowerCase().includes(this.search.toLowerCase());
    })
  }
},

方案2:去掉大括号,使用箭头函数隐式返回

watch: {
  search() {
    this.filtered = this.countries.filter(country => 
      country.name.common.toLowerCase().includes(this.search.toLowerCase())
    )
  }
},

额外优化:用computed代替watch(更推荐)

其实这种根据搜索词过滤列表的场景,用Vue的计算属性(computed)会更合适,它能自动依赖search和countries的变化更新结果,还会缓存计算值,性能更好。你可以把watch和data里的filtered替换成下面的代码:

// 删掉data中的filtered,新增computed属性
computed: {
  filtered() {
    // 先判断countries是否加载完成,避免报错
    if (!this.countries.length) return [];
    return this.countries.filter(country => 
      country.name.common.toLowerCase().includes(this.search.toLowerCase())
    )
  }
},

这样就不用手动维护filtered的更新逻辑了,Vue会帮你自动处理~

备注:内容来源于stack exchange,提问作者Pascal R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:14:36