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中一次性加载数据,直接在本地进行过滤和展示。
  • 数据量非常大:建议使用远程搜索模式,只加载和展示用户输入匹配的数据,避免性能问题。
相关推荐
还是大剑师兰特10 分钟前
什么是尾调用,使用尾调用有什么好处?
javascript·大剑师·尾调用
m0_7482361118 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo61731 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_7482489432 分钟前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_7482356144 分钟前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O3 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink6 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者7 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-8 小时前
验证码机制
前端·后端
燃先生._.9 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js