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 相关文章推荐
用JTrackBar实现的模拟苹果风格的滚动条
Aug 06 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
javascript内存管理详细解析
Nov 11 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
Aug 24 Javascript
jQuery+Ajax实现限制查询间隔的方法
Jun 07 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 Javascript
vue内置指令详解
Apr 03 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
在vue项目中 实现定义全局变量 全局函数操作
Oct 26 Javascript
基于JavaScript实现年月日三级联动
Jun 22 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
摩卡咖啡
2021/03/03 咖啡文化
深入Nginx + PHP 缓存详解
2013/07/11 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
Javascript 继承实现例子
2009/08/12 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
使用django实现一个代码发布系统
2019/07/18 Python
python 实现绘制整齐的表格
2019/11/18 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
大学应届毕业生求职信
2014/05/24 职场文书
支部鉴定材料
2014/06/02 职场文书
汽车专业求职信
2014/06/05 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
MySQL中的隐藏列的具体查看
2021/09/04 MySQL