Xin's blog Xin's blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

Xin

英雄可不能临阵脱逃啊~
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

  • Vue

  • 组件与插件

    • ui组件

      • 自定义饿了么分页器样式
      • el-table实现跨页选中
      • 使用el-table实现前端分页
      • 覆盖ele的样式
      • 自定义ele树形控件样式
      • 清除el-form表单内容
      • 因el-select的远程搜索导致的问题
        • 原因
        • 解决
        • 参考
    • 插件

  • css扩展语言

  • 学习笔记

  • 前端
  • 组件与插件
  • ui组件
ctrlwin
2022-04-11

因el-select的远程搜索导致的问题

# 因el-select的远程搜索导致的问题

# 原因

在使用el-select的远程搜索功能时,发现这样一个问题,先搜索然后点击空白处,搜索框搜索条件被清除但是搜索结果却没变。

效果图:

下面是具体代码:

<el-select
  v-model="formData.groupCodes"
  multiple
  collapse-tags
  filterable
  remote
  placeholder="请选择产品组,可多选"
  :loading="selectLoading"
  :remote-method="searchProducts"
>
    ......
</el-select>
1
2
3
4
5
6
7
8
9
10
11
12
// 下拉框模糊搜索
searchProducts(val) {
  this.selectLoading = true;
   // 此处定时器作用是,基于vue实现的防抖
  if (this.timeout) clearTimeout(this.timeout);
  this.timeout = setTimeout(async () => {
    await this.queryLimitType(val); // 调获取下拉框数据的方法
    this.selectLoading = false;
  }, 300);
},
1
2
3
4
5
6
7
8
9
10

# 解决

经过查找,我发现输入框的搜索条件是在下拉框被隐藏时清空。

那么,我们可以在下拉框被隐藏时重新调一次获取下拉框数据方法。

配置如下:

<el-select
  v-model="formData.groupCodes"
  multiple
  collapse-tags
  filterable
  remote
  placeholder="请选择产品组,可多选"
  :loading="selectLoading"
  :remote-method="searchProducts"
+ @visible-change="resetGroupCodes"
>
    ......
</el-select>

+ // 当下拉框隐藏时,重置搜索结果
+ resetGroupCodes(val) {
+   if (val === false) {
+     this.queryLimitType("");
+   }
+ },
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

配置完后,刚刚那个问题是解决了,但是选中下拉选项时也会触发重置方法,这不是我想要的,还需要再优化下。

我看了饿了么官方文档后发现,el-select有一个reserve-keyword属性,官方描述是:在选中一个选项后保留当前的搜索关键词。

添加这个属性后,选中下拉选项时确实不会再调用重置方法了,但是搜索条件会保留,如何清除搜索条件呢?

通过查百度,我了解到,输入框的搜索条件是绑定在query中的,那么就可以通过change事件清空query中的搜索条件了。

完整代码:

<el-select
+ ref="groupCodes"
  v-model="formData.groupCodes"
  multiple
  collapse-tags
  filterable
  remote
  placeholder="请选择产品组,可多选"
  :loading="selectLoading"
  :remote-method="searchProducts"
+ reserve-keyword
  @visible-change="resetGroupCodes"
+ @change.native.capture="groupCodesChange"
>
	......
</el-select>

+ // 清除搜索结果
+ groupCodesChange() {
+   this.$refs.groupCodes.query = "";
+ },
// 当下拉框隐藏时,重置搜索结果
resetGroupCodes(val) {
  if (val === false) {
    this.queryLimitType("");
  }
},
// 下拉框模糊搜索
searchProducts(val) {
  this.selectLoading = true;
  if (this.timeout) clearTimeout(this.timeout);
  this.timeout = setTimeout(async () => {
    await this.queryLimitType(val);
    this.selectLoading = false;
  }, 300);
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 参考

el-select 1.4.x版本实现2.x.x版本的reserve-keyword功能 (opens new window)

element-UI中监听el-select下拉框可搜索时候,filter-method自定义搜索方法 (opens new window)

在GitHub上编辑 (opens new window)
#ele
上次更新: 4/11/2022, 3:09:54 PM

← 清除el-form表单内容 进度条插件→

最近更新
01
createElement函数创建虚拟DOM
05-26
02
clipboard 剪切板属性
05-26
03
vue的权限管理
05-16
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Xin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×