Vue:解决 element-ui 下拉框过多导致卡顿问题

标签: Vue element-ui


原因:下拉框数据过多,若渲染全部数据,会导致 DOM 数量太多,操作卡顿。

解决办法:将获取的数据(allList)和渲染数据(list)分离开,限制渲染数组的长度。

<template>
    <el-select v-model="value" filterable :filter-method="filterList" placeholder="请选择">
        <el-option
            v-for="item in allList"
            :key="item.value"
            :label="item.label"
            :value="item.value"
        ></el-option>
    </el-select>
</template>

<script>
export default {
    data() {
        return {
            // 渲染列表,限制在20个以内
            list: [],
            // 请求获取的列表,数据量过大时不能直接渲染,会卡顿
            allList: [
                {
                    value: "选项1",
                    label: "黄金糕"
                },
                {
                    value: "选项2",
                    label: "双皮奶"
                },
                {
                    value: "选项3",
                    label: "蚵仔煎"
                },
                {
                    value: "选项4",
                    label: "龙须面"
                },
                {
                    value: "选项5",
                    label: "北京烤鸭"
                }
            ],
            value: ""
        };
    },
    created() {
        // 模拟某些情况,需要设置默认的下拉选项,防止默认选中值显示不正常(例如:不显示label,而显示value)
        this.list = [{
                    value: "选项4",
                    label: "龙须面"
                },
                {
                    value: "选项5",
                    label: "北京烤鸭"
                }]
    },
    methods: {
        filterList(query = "") {
            let arr = this.allList.filter(item => {
                return item.label.includes(query) || item.value.includes(query);
            });
            if (arr.length > 20) {
                this.list = arr.slice(0, 20);
            } else {
                this.list = arr;
            }
        }
    }
};
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 4,879评论 0 1
  • 简说Vue (组件库) https://github.com/ElemeFE/element" 饿了么出品的VUE...
    Estrus丶阅读 5,734评论 0 1
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 8,676评论 0 25
  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组...
    鲁大师666阅读 43,542评论 5 97
  • 我怀疑我的想象力不够了(*/∇\*) 天太冷,其实我真实的字不是这样的!这是瑟瑟发抖时写的(ಡωಡ)
    Mia_张亚妮阅读 1,612评论 2 2