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值没有目标值,所以赋值时需要处理一下

  • 相关阅读:
    luogu P3959 宝藏
    hdu4035 Maze
    [hdu2899]Strange fuction
    luogu4407 [JSOI2009]电子字典 字符串hash + hash表
    SPOJ6717 Two Paths 树形dp
    luogu4595 [COCI2011-2012#5] POPLOCAVANJE 后缀自动机
    后缀数组
    luoguP1659 [国际集训队]拉拉队排练 manacher算法
    luoguP4555 [国家集训队]最长双回文串 manacher算法
    CF17E Palisection 差分+manacher算法
  • 原文地址:https://www.cnblogs.com/baixiaoxiao/p/15203242.html
Copyright © 2011-2022 走看看