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 相关文章推荐
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
IE与FireFox中的childNodes区别
Oct 20 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
12种JavaScript常用的MVC框架比较分析
Nov 16 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
Aug 22 Javascript
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
vue.js 实现评价五角星组件的实例代码
Aug 13 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
jquery实现鼠标悬浮弹出气泡提示框
Dec 23 jQuery
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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
js实现炫酷光感效果
2020/09/05 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
Python3如何判断三角形的类型
2020/04/12 Python
python中线程和进程有何区别
2020/06/17 Python
python Timer 类使用介绍
2020/12/28 Python
python 数据类型强制转换的总结
2021/01/25 Python
python线程优先级队列知识点总结
2021/02/28 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
经贸日语专业个人求职信
2013/12/13 职场文书
体操比赛口号
2014/06/10 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技