zoukankan      html  css  js  c++  java
  • element-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];
            }
        }
    };

    在赋值的时候,可能当前的select值没有目标值,所以赋值时需要处理一下

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/baixiaoxiao/p/15203242.html
Copyright © 2011-2022 走看看