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

问题描述

有一个组件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. 因此, 前端筛选逻辑认为后端返回的这些数据都是无效的 ,做出了"没有匹配项"的判断,所以就看到了一个空的选项列表。
相关推荐
子兮曰6 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖6 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神6 小时前
github发布pages的几种状态记录
前端
不像程序员的程序媛8 小时前
Nginx日志切分
服务器·前端·nginx
北原_春希9 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
尽意啊9 小时前
echarts树图动态添加子节点
前端·javascript·echarts
吃面必吃蒜9 小时前
echarts 极坐标柱状图 如何定义柱子颜色
前端·javascript·echarts
O_oStayPositive9 小时前
Vue3使用ECharts
前端·javascript·echarts
竹秋…9 小时前
echarts自定义tooltip中的内容
前端·javascript·echarts
宝贝露.9 小时前
Axure引入Echarts图无法正常显示问题
前端·javascript·echarts