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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
Prototype 学习 Prototype对象
Jul 12 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
Aug 27 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
Jan 26 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
js中split()方法得到的数组长度问题
Jul 19 Javascript
javascript实现blob加密视频源地址的方法
Aug 08 Javascript
JS中的算法与数据结构之列表(List)实例详解
Aug 16 Javascript
JavaScript分页组件使用方法详解
Jul 26 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中的PDO类
2015/07/06 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php微信开发之关注事件
2018/06/14 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python的动态重新封装的教程
2015/04/11 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
敏捷开发的主要原则都有哪些
2015/04/26 面试题
科技之星事迹材料
2014/06/02 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
学生自我评语
2015/01/04 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
实例详解Python的进程,线程和协程
2022/03/13 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
Mysql 文件配置解析介绍
2022/05/06 MySQL