el-select的搜索功能

el-select的相关信息:

最基本信息

v-model的值为当前被选中的el-option的 value 属性值

:label是选择器可以看到的内容

过滤搜索

普通过滤搜索

html 复制代码
<el-select
           v-model="selectedCountry"
           placeholder="请选择国家"
           filterable
           :loading="loading"
           style="width: 130%;"
           >
    <el-option
               v-for="item in filteredCountries"
               :key="item"
               :label="item"
               :value="item"
               />
</el-select>

其中filteredCountries需要在created中初始化完成或者直接在data中定义,之后如果想实现select选择器中过滤(根据你的输入),可以添加filterable,就可以输入数据自动匹配符合条件的filteredCountries中的item列表,大致的逻辑应该是不区分大小写的模糊搜索。

远程搜索

如果你不想使用默认的搜索,可以使用远程搜索:

html 复制代码
<el-select
            v-model="selectedCountry"
            placeholder="请选择国家"
            filterable
            remote
            :remote-method="remoteMethod"
            :loading="loading"
            style="width: 130%;"
          >
js 复制代码
remoteMethod(query) {
      if (query !== '') {
        this.loading = true;
        setTimeout(() => {
          this.loading = false;
          this.filteredCountries = this.countries.filter(item =>
            item.toLowerCase().includes(query.toLowerCase())
          );
        }, 200);
      } else {
        this.filteredCountries = this.countries;
      }
    }

这个示例代码中,remoteremote-method是为了实现远程搜索的功能。

  1. remote: 当你在输入框中输入内容时,启动远程搜索模式。这意味着输入内容不会直接过滤已有数据,而是通过调用远程方法来获取匹配的数据。
  2. remote-method: 这是你自定义的一个方法,用来处理用户输入并更新候选项。在这个示例中,当输入内容(query)不为空时:
    • 设置loadingtrue,表示正在加载数据。
    • 使用setTimeout模拟数据加载延迟,200毫秒后将loading设置为false
    • 使用filter方法从现有的countries数据中筛选出符合输入内容的项,并更新到filteredCountries中。
    • 如果输入内容为空,则直接将所有的countries数据赋值给filteredCountries

远程搜索模式相关解释

远程搜索模式(Remote Search Mode)是一种实现搜索功能的方式,特别是在需要通过服务器或远程数据源获取数据时。与本地搜索不同,远程搜索会在用户输入搜索关键字时,通过调用一个远程方法来获取或过滤数据。这样做的好处是++可以处理大量数据或动态数据,而不会将所有数据都加载到本地。++

在上面代码中,remote属性启用远程搜索模式,而remote-method是实际执行远程搜索的函数。具体过程如下:

  1. 用户输入:当用户在输入框中输入内容时,会触发远程搜索。
  2. 调用远程方法remote-method会被调用。这个方法根据用户输入的关键字,查询符合条件的数据。
  3. 更新数据:远程方法获取到数据后,将其更新到组件中,以供显示。

这种模式特别适用于以下情况:

  • 数据量非常大,无法一次性加载到本地。
  • 数据需要从服务器端实时获取或过滤。
  • 数据需要动态更新,例如从数据库或API接口中获取。

数据量非常大,无法一次性加载到本地的意思是filteredCountries值无法一次性在created中获取吗,我这里如果在created中获取了这个数据,是不是就意味着可以一次性加载到本地了,那我写这个remote相关的内容是不是白写

远程搜索总结

如果你的filteredCountries数据在组件的created生命周期钩子中一次性获取,那么理论上你是可以将所有数据一次性加载到本地的。这种情况下,你确实不需要使用远程搜索模式和相关方法,因为所有的数据已经在本地了,可以直接进行过滤和展示。

但是需要注意的是,是否选择一次性加载数据到本地,取决于数据量的大小和性能的考虑。如果数据量非常大(例如成千上万条数据),一次性加载到本地可能会导致性能问题,比如页面加载变慢或浏览器内存占用过高。这种情况下,使用远程搜索可以显著改善用户体验,因为它只加载和展示用户当前需要的那部分数据。

总结一下:

  • 数据量较小 :可以在created中一次性加载数据,直接在本地进行过滤和展示。
  • 数据量非常大:建议使用远程搜索模式,只加载和展示用户输入匹配的数据,避免性能问题。
相关推荐
iRuriCatt14 分钟前
智慧景区管理系统 | 计算机毕设项目
java·前端·spring boot·vue·毕设
qq_124987075334 分钟前
基于springboot的会议室预订系统设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·信息可视化·毕业设计·计算机毕业设计
程序员清洒37 分钟前
Flutter for OpenHarmony:Icon 与 IconButton — 图标系统集成
前端·学习·flutter·华为
萧曵 丶43 分钟前
JavaScript 函数各种写法和场景
开发语言·javascript·ecmascript
Yolanda941 小时前
【项目经验】钉钉免密登录实现
前端·javascript·钉钉
2601_949613021 小时前
flutter_for_openharmony家庭药箱管理app实战+药品详情实现
java·前端·flutter
摘星编程1 小时前
在OpenHarmony上用React Native:collapsable节点优化策略
javascript·react native·react.js
ttod_qzstudio2 小时前
Vue 3 中 toRaw 的取舍之道:以 Babylon.js 3D 开发为例
vue.js·babylonjs
We་ct2 小时前
LeetCode 15. 三数之和:排序+双指针解法全解析
前端·算法·leetcode·typescript
美狐美颜SDK开放平台2 小时前
直播场景下抖动特效的实现方案:美颜sdk开发经验分享
前端·人工智能·美颜sdk·直播美颜sdk·视频美颜sdk