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

问题描述

有一个组件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. 因此, 前端筛选逻辑认为后端返回的这些数据都是无效的 ,做出了"没有匹配项"的判断,所以就看到了一个空的选项列表。
相关推荐
用户9850335932835 分钟前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端
颜酱38 分钟前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
hoLzwEge43 分钟前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
leoZ2311 小时前
记忆系统与 Agent 定制完全指南(四):自定义 Agent 开发(一)
前端·chrome
慧一居士1 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
程序员黑豆1 小时前
鸿蒙应用开发实战:从零学会自定义组件
前端·华为·harmonyos
leoZ2311 小时前
记忆系统与 Agent 定制完全指南(三):记忆的检索与使用
前端·chrome
遇乐的果园1 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
GIS阵地2 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
刘较瘦_3 小时前
AI 开发中的 Git Submodule 父子仓库模式:前后端分仓管理与协作实践
前端·github