千家信息网

Element中如何实现select多数据加载优化

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了Element中如何实现select多数据加载优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。场景近期着手开发基于
千家信息网最后更新 2026年11月02日Element中如何实现select多数据加载优化

这篇文章主要介绍了Element中如何实现select多数据加载优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

场景

近期着手开发基于ElementUI的后台管理系统,偶然间发现「el-select」下拉选择时候遇到一个问题,当渲染下拉选项的「options」的数据量过多时「本项目中的数据条目已过万」,就会出现下拉选择器卡顿的情况,尤其是在模糊匹配过滤的情况下,显得十分的卡顿。初始化选择器的时候,也会点击无反应,有时候需要点击多次才可出现「dialog」弹窗(本次下拉筛选在弹窗中实现)。 翻阅多篇博客笔记之后,最终找到一个可以解决问题的方案,现将此次优化方案记录成为笔记,以便于日后遇到类似问题的时候便于查阅。

注:基于select的下拉筛选,通过自定义事件来实现模糊搜索匹配。

一共两种方案:

  • 一是获取所有数据,通过输入的关键字自己对获取的数据进行过滤处理;

  • 二是通过输入的关键字来动态请求后台接口,通过接口返回的数据来动态渲染下拉选项;

代码实现

Vue组件实例

  • 「v-el-select-loadmore」为自定义指令封装的数据加载指令,是为了解决和优化elementUI下拉选择器加载数据过多出现卡顿问题的。

  • 「filter-method」是下拉选择器的一个自定义属性,可以监听输入的变量,从而依据变量来实现数据的动态获取;

  // 自定义指令  directives: {    "el-select-loadmore": (el, binding) => {      // 获取element UI定义好的scroll元素      const SELECTWRAP_ROM = el.querySelector(".el-select-dropdown .el-select-dropdown__wrap");      if (SELECTWRAP_ROM) {    // 添加scroll事件        SELECTWRAP_ROM.addEventListener("scroll", function() {      // 判断滚动          const condition = this.scrollHeight - this.scrollTop <= this.clientHeight;          condition && binding.value();        });      }    }  }

相应的数据函数

export default {  data() {    return {      relatedOpen: false,      options: [] /* 选择下拉框的值 */,      courseList: [],      rangeNumber: 10,      searchLoad: false /* 下拉框的loading状态 */,      value: "",      timer: null    };  },  created() {    this.getOptions();  },  methods: {    // 按需加载    loadMore(n) {      return () => (this.rangeNumber += 5);    },    // 过滤课件    filterMethod(query) {      if (this.timer != null) clearTimeout(this.timer);      !this.searchLoad && (this.searchLoad = true);      this.timer = setTimeout(() => {        this.options = !!query ? this.courseList.filter(el => el.value.toLowerCase().includes(query.toLowerCase())) : this.courseList;        clearTimeout(this.timer);        this.searchLoad = false;        this.rangeNumber = 10;        this.timer = null;      }, 500);    },    // 监听select下拉框的显示和隐藏    visibleChange(flag) {      // 显示时初始化列表      flag && this.filterMethod("");      // 初始化默认值      this.rangeNumber = 10;    },    // 获取选项    async getOptions() {      await searchCourseware().then(res => {        let list = res.data || [];        // 默认展示的数据        this.options = list;        // 原始数据        this.courseList = list;      });    }  }}

注:

  • 定时器作用是防止输入筛选的关键字太过频繁,从而造成数据响应不及时;因为本次是一次性获取了全部的数据,所以这里只是用做渲染加载数据;

  • 选择器的事件函数主要是用来初始化"获取焦点"和"失去焦点"时处理默认展示数据用的,若是获取的网络请求,此处需要做"函数截流"处理;目的是减少接口请求次数。

感谢你能够认真阅读完这篇文章,希望小编分享的"Element中如何实现select多数据加载优化"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 下拉 选择 篇文章 问题 输入 事件 关键 关键字 函数 动态 指令 接口 方案 时候 处理 变量 后台 情况 焦点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技媒体 贷财互联网科技 致聘互联网科技 银优互联网科技有限公司 电子科技大学互联网 互联网科技公司名称 恒生科技互联网指数分析 互联网校园科技培训 互联网和黑科技的看法 互联网科技公司实习生 语蝶互联网科技有限公司 注册互联网科技公司经营范围大全 互联网科技大奖都有哪些公司 科技互联网的核心竞争力 每天都有哪些好的互联网科技 伍佰万互联网科技怎么赚钱 宇信科技在杭州互联网排第几 全球科技与互联网公司市值变化 吉林省码上互联网科技电话 深圳互联网科技园地址 百单网互联网科技有限公司怎么样 广州为想互联网科技有限公司 百单互联网科技有限公司 四川狮子座互联网科技 天速互联网络科技有限公司 江阴互联网智能科技产品进口 富国互联网科技002692 互联网科技包装股份有限公司上市 同城互联网络科技 好易买互联网科技
0