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 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
js实现缓冲运动效果的方法
Apr 10 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
Oct 08 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
a标签置灰不可点击的实现方法
Feb 06 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
浅谈vue项目可以从哪些方面进行优化
May 05 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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
set在python里的含义和用法
2019/06/24 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
销售业务实习自我鉴定
2013/09/23 职场文书
党员自我评价分享
2013/12/13 职场文书
计算机求职信
2014/07/02 职场文书
聘用意向书
2014/07/29 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
2015年学校减负工作总结
2015/05/19 职场文书