el-select 组件设置filterable属性后,实现搜索不到数据时保留输入的内容

本文介绍了在使用Element UI的el-select组件,并设置filterable属性进行搜索时,如何在搜索不到匹配数据的情况下,仍然保留用户的输入内容。详细解决方案如下:

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:

解决方法:
 

<template>
  <div>
    <el-select v-model="refuseReason" filterable placeholder="请选择拒绝理由" clearable style="width:200px" :filter-method="dataFilter">
      <el-option v-for="item in refuseList" :key="item" :label="item" :value="item" />
    </el-select>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      refuseReason: '',
      refuseList: ['根节点错误', '子节点错误', '根节点与子节点重复', '根节点与子节点不可成组',
        '子节点层级错误', '已存在大量相似模板', '该组已被医生修改', '根节点与子节点位置错误',
        '该组可与其他组合并', '可下单诊断', '其他']
    }
  },
  methods: {
    /*
    *通过 filter
### ElementUI 中 `el-select` 组件远程搜索性能优化 #### 使用远程搜索方法 (`remote-method`) 为了防止大量数据一次性加载到前端而引起的卡顿,可以采用分页查询的方式通过服务器端来处理数据过滤。当用户输入关键字,调用自定义的 `remote-method` 函数向后台发送请求,并传入当前用户的输入作为参数,在返回的结果中仅包含匹配项。 ```javascript methods: { querySearch(queryString, cb) { this.$axios.get('/api/search', { params: { q: queryString } }) .then(response => { const results = response.data.items.map(item => ({ value: item.name, id: item.id })); // 调用 callback 返回建议列表 cb(results); }); } } ``` 此方式减少了初始加载间以及每次交互后的响应延迟[^1]。 #### 实现滚动加载 (`el-select-loadmore`) 除了按需加载外,还可以考虑增加懒加载机制——即随着用户向下滚动自动追加更多项目。这不仅提高了用户体验还降低了初次渲染的压力。具体做法是在原有基础上加入监听器检测到底部位置并触发新的 API 请求获取额外记录: ```html <template> <div class="example"> <!-- ... --> <ul v-if="loadingMore" style="text-align:center;"> <li>Loading...</li> </ul> </div> </template> <script> export default { data() { return { loadingMore: false, page: 1, pageSize: 20, options: [] }; }, methods: { handleScroll(event) { const bottom = event.target.scrollHeight - Math.ceil(event.target.scrollTop + event.target.clientHeight); if (bottom <= 0 && !this.loadingMore) { this.loadMore(); } }, loadMore() { this.loadingMore = true; setTimeout(() => { this.page++; this.fetchData().finally(() => { this.loadingMore = false; }); }, 500); // 模拟网络延 }, fetchData() { return new Promise((resolve) => resolve([ /* 新增的数据 */ ]) ).then((newOptions) => { this.options.push(...newOptions); }); } } }; </script> ``` 上述代码片段展示了如何结合 Vue 的生命周期钩子与事件处理器完成这一功能[^4]。 #### 处理回显问题 针对某些场景下的回显需求,可以在初始化阶段预先加载必要的选项,或者调整逻辑使得即使在本地找不到对应 ID 的候也能正确显示已选中的值而不必每次都依赖完整的远端数据集。此外,也可以尝试缓存最近使用的几个版本以提高效率[^2]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值