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 相关文章推荐
javascript在一段文字中的光标处插入其他文字
Aug 26 Javascript
Jquery绑定事件(bind和live的区别介绍)
Aug 23 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
分享ES6的7个实用技巧
Jan 18 Javascript
详解微信小程序缓存--缓存时效性
May 02 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
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经典的给图片加水印程序
2006/12/06 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
wxPython中listbox用法实例详解
2015/06/01 Python
python中的print()输出
2019/04/12 Python
python多进程读图提取特征存npy
2019/05/21 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
selenium如何定位span元素的实现
2021/01/13 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
央视元宵晚会主持串词
2014/03/25 职场文书
劳动竞赛口号
2014/06/16 职场文书
打架检讨书
2015/01/27 职场文书
投资意向协议书
2015/01/29 职场文书