解决组件不能远程搜索的问题

问题描述

有一个组件a-select用于在下拉框中选中某个人物,在表单中提交。它的运作方式是其下拉框最初没有数据,需要用户搜索人名,后段会返回模糊搜索的系列数据。例如,前段搜索张建国,后段会返回"张建国"、"张坚果"等;搜索zjg同理;搜索"ll",返回"bill"、"killra"等。

但问题在于,前段此下拉框没有同步显示后段返回的所有数据,而是会严格显示与用户输入字段完全匹配的人名,例如搜索张建国,只显示张建国;搜索zjg则显示不出任何数据。

但此时,如果点击空白处再点击搜索框,又可以顺利显示上一次后段返回的所有数据。

已知选项没有经过特殊处理,是直接v-for循环显示后段返回的数据,搜索方式也被替换成了自定义的函数handleSearch,用于调用接口

解决方案

经过检查,该组件库该组件a-select会立即尝试在 当前已有的选项列表中查找包含"zjg"的条目。因为此时从服务器返回的数据还没到,列表是空的,所以它什么也找不到,就显示"无数据"。

与此同时,handleSearch 函数向服务器发送了请求。服务器成功返回了"张建国"、"张坚果"等数据,代码也更新了选项列表。但是,因为组件的内部状态已经被第一次的"本地筛选"设置为"无匹配结果",所以即便是选项列表更新了,它也不会重新显示下拉框内容。只有当再次交互(例如点击空白处再点击输入框)时,组件才会重新渲染,这时才能看到正确的数据。

那么解决方案就很简单了,在组件库中找到一个属性用于禁用组件自带的前端筛选功能,我这边是:filter-option="false"。解决成功。

额外解释一下,为什么搜索绝对匹配(或部分匹配)的字段可以显示,而只有名字首字母被限制:

当输入 "ll" :

  1. 向后端发请求,后端返回了包含 "bill" 的数据列表。
  2. 组件的选项数据更新了,包含了 "bill" 这个选项。
  3. 与此同时, 组件自带的前端筛选逻辑也在运行。它会用输入的 "ll" 去检查 options 列表里的每一项。
  4. 它发现 "bill" 这个名字里确实包含了 "ll",认为这是一个有效的匹配,于是就把它显示了出来。

当您输入 "zjg" :

  1. 向后端发请求,后端识别出这是拼音缩写,成功返回了 "张建国" 和 "张坚果" 的数据列表。
  2. 组件的 options 数据被正确更新了。
  3. 但问题来了 :组件自带的前端筛选逻辑非常"单纯",它并不知道 "zjg" 和 "张建国" 之间有什么关系。
  4. 它用 "zjg" 这个字符串去检查 "张建国" 和 "张坚果" 这两个选项的文字,发现完全不匹配。
  5. 因此, 前端筛选逻辑认为后端返回的这些数据都是无效的 ,做出了"没有匹配项"的判断,所以就看到了一个空的选项列表。
相关推荐
QQ1__81151751517 分钟前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态19 分钟前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子20 分钟前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室22 分钟前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI22 分钟前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing22 分钟前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者22 分钟前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册22 分钟前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李25 分钟前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢27 分钟前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web