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

Vue中异步搜索数据仅点击后才显示的问题求助

问题分析与解决方案

先帮你拆解下问题的核心原因,再给出针对性的修复方案:

核心原因:@change 事件的触发时机不符合预期

你绑定的 @change 事件,在Framework7的Searchbar组件(以及大多数原生表单输入组件)中,默认是在输入框失去焦点时才会触发,而非输入内容实时触发。这就解释了为什么输入时结果没更新——因为此时@change还没执行;而点击表格区域时,Searchbar失去焦点,触发了@change事件,搜索方法才被调用,结果才显示出来。

另外你的异步代码虽能运行,但存在小隐患:第一个then回调给vals赋值,第二个then依赖这个变量,万一查询出现异常,可能导致vals未定义不过这不是当前问题的主因。

修复方案

1. 替换事件为实时触发的@input

把@change="handleSearch"改成@input="handleSearch",这样每次输入框内容变化时都会立即调用搜索方法,实现结果同步更新:

<f7-searchbar 
  :clear-button="true" 
  @focus="showFilters=true" 
  @blur="showFilters=false" 
  v-model="searchText" 
  @input="handleSearch" >
</f7-searchbar>

2. 优化异步代码(可选但推荐)

用async/await重构handleSearch方法,让代码更清晰易读,同时避免变量作用域的潜在问题:

async handleSearch() {
  try {
    const res = await db.query('categories/search', {reduce: false});
    console.log(`${res.rows[0].key} is the result of searched`);
    this.searchResults = res.rows.map(row => row.key.metadata);
  } catch (err) {
    // 处理查询异常,比如提示用户搜索失败
    console.error('Search failed:', err);
  }
}

3. 修正表格HTML结构(可选)

你的表格结构不符合HTML规范:<tr>标签内直接放置<span>是错误写法,应该用<td>包裹内容,否则可能引发样式或渲染异常:

<table>
  <tr v-for="entry in searchResults" class="popup-trigger" style="text-align: left;">
    <td>{{ entry }}</td>
  </tr>
</table>

验证效果

修改完成后,输入内容时应该会立即触发搜索,表格结果也会同步更新,不需要再点击其他区域了。

内容的提问来源于stack exchange,提问作者David J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:31:23