el-select数据过多懒加载的解决(loadmore)


Posted in Javascript onMay 29, 2019

el-select数据过多处理方式

在日常项目中el-select组件的使用频率是非常之高的. 当数据过多时渲染时间非常长, 这里提供几个处理方式.

远程搜索

组件提供了远程搜索方式, 也就是按照你输入的结果匹配选项.

下拉懒加载loadMore

下拉懒加载, 当select滚动到底部时, 你再去请求一部分数据, 加入到当前数据中.

某组件中:

<template>
  <el-select
    v-model="value"
    placeholder="请选择"
    filterable
    multiple
    v-el-select-loadmore="loadmore"
  >
    <el-option
      v-for="item in options"
      :key="item.id"
      :label="item.label"
      :value="item.id">
    </el-option>
  </el-select>
</template>
 
export default {
  directives: {
    'el-select-loadmore': {
      bind(el, binding) {
        // 获取element-ui定义好的scroll盒子
        const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
        SELECTWRAP_DOM.addEventListener('scroll', function () {
          /**
          * scrollHeight 获取元素内容高度(只读)
          * scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0.
          * clientHeight 读取元素的可见高度(只读)
          * 如果元素滚动到底, 下面等式返回true, 没有则返回false:
          * ele.scrollHeight - ele.scrollTop === ele.clientHeight;
          */
          const condition = this.scrollHeight - this.scrollTop <= this.clientHeight;
          if (condition) {
            binding.value();
          }
        });
      }
    }
  },
  data() {
    return {
      value: '',
      options: [],
      formData: {
        pageIndex: 1,
        pageSize: 20,
      }
    };
  },
  mounted() {
    this.getList(this.formData);
  },
  methods: {
    loadmore() {
      this.formData.pageIndex++;
      this.getList(this.formData);
    },
    getList(formData) {
      // 这里是接口请求数据, 带分页条件
      const _res = [1, 2, 3]; // 请求得到的数据
      this.options = [...this.options, ..._res];
    }
  }
};

这样就做到了滚动懒加载, 具体细节在应用时修改.

问题

这样渲染问题解决了, 随之会出现一个问题, 就是当你的value为选中的数据后, 分页数大的数据.

当页数小时, options数据中没有当前value的那一个, value就会显示为得到的id.

当你选中后你要保存下来当前的id以及lable, 下次过来时, 带入当前组件, 手动放在options中,这样就解决了这个问题.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype1.6 JS 官方下载地址
Nov 30 Javascript
js call方法详细介绍(js 的继承)
Nov 18 Javascript
jquery实现手机发送验证码的倒计时代码
Feb 12 Javascript
JavaScript省市联动实现代码
Feb 15 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
jQuery简单实现禁用右键菜单
Mar 10 Javascript
图解prototype、proto和constructor的三角关系
Jul 31 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
Sep 24 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
js基础语法与maven项目配置教程案例
Jul 15 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 #Javascript
vue读取本地的excel文件并显示在网页上方法示例
May 29 #Javascript
vue-cli3中vue.config.js配置教程详解
May 29 #Javascript
详解vue-cli3开发Chrome插件实践
May 29 #Javascript
vue里的data要用return返回的原因浅析
May 28 #Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 #Javascript
Javascript三种字符串连接方式及性能比较
May 28 #Javascript
You might like
Sublime里直接运行PHP配置方法
2014/11/28 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
python中的__slots__使用示例
2015/02/26 Python
python和ruby,我选谁?
2017/09/13 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
诚信考试标语
2014/06/24 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
甲午风云观后感
2015/06/02 职场文书
Oracle笔记
2021/04/05 Oracle
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
数据库之SQL技巧整理案例
2021/07/07 SQL Server
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
使用Python解决图表与画布的间距问题
2022/04/11 Python