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 相关文章推荐
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
基于vue中解决v-for使用报红并出现警告的问题
Mar 03 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
js实现AI五子棋人机大战
May 28 Javascript
js实现点击选项置顶动画效果
Aug 25 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
php的access操作类
2008/04/09 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
整理Python最基本的操作字典的方法
2015/04/24 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python 经典数字滤波实例
2019/12/16 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
python音频处理的示例详解
2020/12/23 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
出国留学经济担保书
2014/04/01 职场文书
希特勒的演讲稿
2014/05/23 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
国王的演讲观后感
2015/06/03 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
详解SQL报错盲注
2022/07/23 SQL Server