elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

简介: elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

效果展示(多列可以配置)


一、icon下拉框的多列选择:





二、常规、通用下拉框的多列选择:



【注】第二种常规、通用下拉框的多列选择,是在第一种的前端代码上删除几行代码就行(把icon显示标签删去),所以下面着重介绍第一种icon下拉框的多列选择。


思路


  不使用下拉框标签<el-option>来做,使用elementUI提供的popover弹窗来做。


  popover弹窗官方文档以及演示地址:https://element.eleme.cn/#/zh-CN/component/popover#events


具体代码(复制粘贴即可使用)


一、html代码:


<el-form-item label="icon" prop="icon">
  <el-popover placement="bottom-start" width="460" trigger="click" @show="resetIconName()" >
    <div class="icon-body">
      <el-input v-model="icon_name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
        <i slot="suffix" class="el-icon-search el-input__icon" ></i>
      </el-input>
      <div class="icon-list">
        <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
          <i :class="item" style="height: 30px;width: 16px;" ></i>
          <span>{{ item }}</span>
        </div>
      </div>
    </div>
    <el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
      <i v-if="form.icon" slot="prefix" :class="form.icon" style="height: 32px;width: 16px;"></i>
      <i v-else slot="prefix" class="el-icon-search" style="height: 32px;width: 16px;" ></i>
    </el-input>
  </el-popover>
</el-form-item>


【代码讲解】首先,肯定是在一个<el-form>下的<el-form-item>里面的表单项做的;<el-popover>标签的API可以参考上面贴的官方地址,主要是提供一个点击之后在下面附带的弹窗;弹窗中,我们设置一个输入框来进行选择值的搜索,下方(即<div class="icon-list">部分)用于多列显示我们想选择的值。



二、vue代码:


  new Vue({
        data: {
            // 表单: 收集`新增和修改弹窗`的表单数据
            form: {
                "icon": ''
            },
            // icon的搜索关键字
            icon_name:'',
            // 可选icon列表
            icons: ["el-icon-platform-eleme","el-icon-eleme","el-icon-delete-solid","el-icon-delete","el-icon-s-tools"],
            // 用于在页面显示的icon列表
            iconList: []
        },
        mounted: function () {   //自动触发写入的函数
            this.iconList = this.icons;
        },
        methods: {
            /** 过滤搜索icon */
            filterIcons() {
                this.iconList = this.icons;
                if (this.icon_name) {
                    this.iconList = this.iconList.filter(item => item.includes(this.icon_name))
                }
            },
            /** 选中icon */
            selectedIcon(name) {
                this.form.icon = name;
                document.body.click()
            },
            /** 重置搜索icon的关键值 */
            resetIconName(){
                this.icon_name = '';
            }
        }
    })


三、css代码:


<style rel="stylesheet/scss" >
        .icon-body {
            width: 100%;
            padding: 10px;
        }
        .icon-body .icon-list {
            height: 200px;
            overflow-y: scroll;
        }
        .icon-body .icon-list div {
            height: 30px;
            line-height: 30px;
            margin-bottom: -5px;
            cursor: pointer;
            // 这里是控制显示几列的地方 3列就是 1/3 = 33%
            width: 49%;
            float: left;
        }
        .icon-body .icon-list span {
            fill: currentColor;
            overflow: hidden;
        }
    </style>


其他(把icon图表显示删除,非必须)


  删除html代码里面有关icon的就行,其他不用动,删除后代码如下:


<el-form-item label="icon" prop="icon">
  <el-popover placement="bottom-start" width="460" trigger="click" @show="resetIconName()" >
    <div class="icon-body">
      <el-input v-model="icon_name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
      </el-input>
      <div class="icon-list">
        <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
          <span>{{ item }}</span>
        </div>
      </div>
    </div>
    <el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
    </el-input>
  </el-popover>
</el-form-item>
相关文章
【UI】 element -ui select下拉框label显示多个值
【UI】 element -ui select下拉框label显示多个值
447 1
Element el-select 选择器(下拉框)详解
本文目录 1. 用途 2. 数据绑定 2.1 固定选项 2.2 选项绑定数组 3. 功能效果 3.1 可清空选项 3.2 多选 3.3 可搜索 4. 事件响应 5. 小结
7232 0
Element el-select 选择器(下拉框)详解
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
9617 1
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
|
JavaScript UED
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
4467 0
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
|
前端开发 JavaScript 开发者
利用 el-select 和 el-tree 实现树形结构多选框联动功能
本文详细介绍了如何使用ElementUI中的el-select下拉选择器和el-tree树形控件来实现多功能联动选择器,包括多选、删除、搜索、清空选项等功能。通过树形控件展示复杂的层级结构,用户可以通过下拉选择树形节点,实时搜索节点,且支持批量选择和删除功能。文中提供了完整的HTML、JavaScript和CSS代码实现,帮助开发者快速集成此功能。
4347 0
利用 el-select 和 el-tree 实现树形结构多选框联动功能
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
760 6
elementUI使用Pagination分页组件增加自定义slot
本文介绍了如何在Element UI的Pagination分页组件中使用自定义slot。通过在`el-pagination`标签内的适当位置添加slot内容,可以在分页组件中插入自定义的HTML或组件。文章提供了一个示例代码,展示了如何添加两个自定义slot,并展示了最终效果。
1516 4
elementUI使用Pagination分页组件增加自定义slot
|
移动开发 资源调度 JavaScript
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
这篇文章介绍了在Vue移动端网页中使用`pdfh5`和`vue-pdf`两个插件来实现PDF文件的预览,包括滚动查看、缩放、添加水印、分页加载、跳转指定页数等功能。
8658 1
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
ElementPlus 之 el-select 多选实现全选功能
本文介绍了在ElementPlus框架中,如何通过自定义事件处理和条件判断实现`el-select`多选控件的全选功能。
2013 1
ElementPlus 之 el-select 多选实现全选功能
|
前端开发 JavaScript
【项目笔记】:elementui下拉框数据太多造成页面卡顿怎么解决?
针对前端下拉框数据过多造成页面卡顿,元芳你怎么看?
670 2