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中一次性加载数据,直接在本地进行过滤和展示。
  • 数据量非常大:建议使用远程搜索模式,只加载和展示用户输入匹配的数据,避免性能问题。
相关推荐
桂月二二26 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
CodeClimb1 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
沈梦研1 小时前
【Vscode】Vscode不能执行vue脚本的原因及解决方法
ide·vue.js·vscode
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
轻口味2 小时前
Vue.js 组件之间的通信模式
vue.js
浪浪山小白兔3 小时前
HTML5 新表单属性详解
前端·html·html5
lee5763 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579653 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter