Element-UI中Select选择器详解

2023-11-18

前言
最近开发的后台管理系统项目采用Vue+Element-UI技术架构,在使用Elment-UI中Select组件的时候遇到了比较多的操作难题,官网上关于这个组件的使用文档介绍的不是很详细,仅仅提供了一些基本用法,很多拓展场景都没有涉及到,在查阅了大量资料之后终于将目前的需求都完美解决了,这里整理一些Select组件的使用方案,希望能帮到有同样需求的同学。

项目已上传github,欢迎大家下载交流。

前端项目地址:https://github.com/Hanxueqing/Element-select

项目运行

克隆到本地

git clone git@github.com:Hanxueqing/Element-select.git

安装依赖

npm install

开启本地服务器localhost:8080

yarn serve

发布环境

yarn build
使用场景
局部引入Select组件
注意这里引入Select组件的时候还需要引入Option,不然下拉列表渲染不出来,他们是两个单独的组件。

import { Select, Option} from ‘element-ui’
Vue.use(Select)
Vue.use(Option)
使用下拉菜单展示数据项
v-model的值为当前被选中的el-option的 value 属性值,输入框中显示的为label属性值。

        <el-select v-model="value" placeholder="请选择">
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
            :disabled="item.disabled">
          </el-option>
      </el-select>

我们将要显示在下拉菜单中的数据写在options数组中,给label属性赋值姓名,让输入框显示我们选中的姓名。

效果演示:

image
为select设定默认值
将默认值赋给v-model绑定的数据即可,此处我们给v-model绑定的是value,所以在data中给value赋值为"马化腾"为默认值。

value: ‘马化腾’
在输入框按下回车,选择第一个匹配项
在el-select标签中添加default-first-option属性,需配合 filterable 或 remote 使用。

在下拉菜单中,展示多项数据
目前我们在options数组中为每一个数据定义了三个字段,分别是公司、姓名和毕业院校,但是下拉列表中只能显示姓名,所以我们要自定义HTML模板,插入el-option中的slot。


{{ item.company }}
{{ item.label }}
{{ item.school }}

效果演示:

image
给el-select添加唯一class名
我们修改了列表项的样式,但是页面中可能会使用多个select组件,直接修改会影响全局样式,在页面渲染的时候,el-select总是会被渲染为仅次于body层级的div,我们没有办法通过父级限制它,所以我们需要给它自身添加一个class名。

.el-select-dropdown__item span{
width:100px;
text-align:center;
}
在el-select上按照常规方法添加class = “optionsContent”,不生效,给el-select加父标签

来包裹el-select也没用。

        <div class = "optionsContainter">
          <el-select v-model="value" placeholder="请选择" class = "optionsContent">
            <el-option
              v-for="item in options"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              :disabled="item.disabled"
            >
              <span style="float: left">{{ item.company }}</span>
              <span style="float: left">{{ item.label }}</span>
              <span style="float: left">{{ item.school }}</span>
            </el-option>
        </el-select>
        </div>

在控制台中查看渲染结果可以看到,class名和div根本没有被渲染出来。

image
这里需要将class改为propper-class

通过popper-class来自定义一个类,这样子在控制台可以看到,自定义的类渲染到页面上的效果,class名已经添加成功了:

image
根据输入条件模糊查询
有的时候我们需要根据用户在input框中输入的内容提供对应的列表项。这时候需要为el-select添加filterable属性即可启用搜索功能。

效果演示:

image
当我们想实现输入拼音首字母检索的时候,就需要使用filter-method给它传入一个函数方法。

默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。

给options中的每一个数据项添加szm字段,赋值为姓名拼音首字母

{
value: ‘选项1’,
company: ‘腾讯’,
label: ‘马化腾’,
school: ‘深圳大学’,
szm:‘mht’

    }

el-select标签中给filter-method绑定filter方法

在method中编写filter方法

filter(v) {
// 对绑定数据赋值
this.options = this.copy.filter((item) => {
// 如果直接包含输入值直接返回true
const val = v.toLowerCase()
if (item.label.indexOf(val) !== -1) return true
if (item.szm.substring(0, 1).indexOf(val) !== -1) return true
if (item.szm.indexOf(val) !== -1) return true
})
}
在mounted中给copy数据赋值,保留数据源

mounted () {
// 保留数据源
this.copy = Object.assign(this.options)
}
效果演示:

image
在Select 组件头部插入内容
当你需要在select的input框中插入内容时就需要用到组件提供的slot具名插槽,name值为:prefix。

          <template slot = "prefix">
            <span class = 'prefixSlot'>互联网大佬</span>
          </template>

image
在Option 下拉列表插入内容
如果我们需要在Option下拉列表中插入内容,官方也给我们提供了slot匿名插槽。比如,我们在数据项之前添加一个表头:

      <template>
        <div class = "optionHeader" v-show = 'optionVisible'>
          <span style="float: left">姓名</span>
          <span style="float: left;">卡号</span>
          <span style="float: left;">手机号</span>
        </div>
      </template>

image
外部组件获得下拉列表选中项数据
我们需要将下拉列表中选中的数据展示在外部页面中,在el-option标签中给value值绑定item.value,那么v-model里的value将会得到选中对象的value,如果赋值为item,那将会得到选中的对象,可以在change事件里将返回的值分别赋值给需要的变量。

我们给el-select的chage事件绑定showMessage方法,参数是$event

<el-select v-model=“value” placeholder=“请选择” popper-class = “optionsContent” filterable :filter-method=“filter” @change=“showMessage($event)”>
我们先打印一下获得的参数,可以获取到选中的对象

image
在methods中定义showMessage方法,给对应的数据赋值

  showMessage(e){
    console.log(e)
    this.v_company = e.company;
    this.v_label = e.label;
    this.v_school = e.school
  }

在页面中展示我们获得的数据

      <div class = "title">
        <span>公司:{{v_company}}</span>
        <span>姓名:{{v_label}}</span>
        <span>毕业院校:{{v_school}}</span>
      </div>

效果演示:

image
当输入框为空的时候不显示下拉列表,输入数据的时候根据输入内容显示对应列表项
现在默认是输入框获取焦点的时候就显示全部列表项,但是当我们涉及到一些保密功能时,不希望显示全部的列表项,比如选择会员,我们不能一开就将会员信息全部展示出来,所以一开始需要在data中设置一个数据optionVisible:false,控制下拉列表的显示与隐藏。

下拉列表的默认样式也需要做一些修改,去掉小尖头、边框、最小宽度和盒子阴影。

.popper__arrow{
display: none!important;
}
.el-select-dropdown{
box-shadow: none!important;
min-width: 0px;
border:0!important;
}
给el-select和el-option添加v-show指令v-show = ‘optionVisible’,在el-select标签上绑定@keyup.native = "showOption"方法,编写showOption方法,判断输入框中的数据长度不为0时,显示下拉列表。

showOption(){
let inputContent = document.getElementsByClassName(‘el-input__inner’)[0].value
console.log(inputContent.length)
if(inputContent.length != 0){
this.optionVisible = true;
}
}
效果演示:

image

作者:视觉派Pie
链接:https://www.jianshu.com/p/4a83a6d8136c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文链接:https://www.jianshu.com/p/4a83a6d8136c

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Element-UI中Select选择器详解 的相关文章

  • 光模块SFP+与SFP、XFP、QSFP、QSFP+的区别

    光收发模块 一 光收发一体模块定义 光收发一体模块由光电子器件 功能电路和光接口等组成 光电子器件包括发射和接收两部分 发射部分是 输入一定码率的电信号经内部的驱动芯片处理后驱动半导体激光器 LD 或发光二极管 LED 发射出相应速率的调制
  • K8S 使用 SideCar 模式部署 Filebeat 收集容器日志

    对于 K8S 内的容器日志收集 一般有两种常用的方式 1 使用 DaemonSet 在每台 Node 上部署一个日志收集容器 用于收集当前 Node 上所有容器挂载到宿主机目录下的日志 2 使用 SideCar 模式将日志收集容器与业务容器
  • python基础运用

    列表有索引 下标 字符串有 格式化字符串 str1 xxx 0 sss 1 format 哈哈 100 print str1 print xxx sss d 哈哈 100 name 张三 age 18 hobby 唱 跳 rap 篮球 张三
  • 计算机世界规整_20211110_周三

    计算机世界规整 20211110 周三 扫我查看
  • Android 4.4.2引入的超炫动画库

    酷炫 作者博客 http rkhcy github io 源码地址 https github com Rkhcy TransitionNote Google Demo https github com android platform fr
  • 在vue3中使用百度地图

    1 在vue项目public文件夹下的index html中引入script 在需要使用百度地图的地方直接使用 代码如下
  • 移动开发之我见--“Android开发生涯”

    纵观这几年的发展 移动手机的发展真是翻天覆地 前两年诺基亚一统天下 苹果颠覆了整个手机市场 安卓也分得了一杯羹 WindowPhone手机也纯纯欲动 Bada也抓紧推出自己的系统 360也要推出自己的手机系统 百度 腾讯纷拥而至 未来世界是
  • numpy 更新版本后 more than 1 DLL from .libs警告

    问题 解析 由于卸载或者更新旧版本时 未能删掉对应的 dll文件导致 解决 根据警告路径 找到对应的dll文件 根据时间 删掉之前的版本 保留近期版本 直接删除并不会影响新版本
  • VsCode的 code . 失效了?如何解决

    已经安装了vscode 为什么没有 code 命令呢 是因为你下载vscode的时候 是直接拷贝的文件 或者下载失误的问题 从而导致code环境变量没有配置 配置环境变量 path 找到我的电脑 右键 属性 2 选择高级系统设置 单机即可
  • 栅压自举采样电路(bootstrap技术)

    栅压自举采样电路 bootstrap技术 参考 CMOS模 数转换器设计与仿真 编著 张锋 陈铖颖 范军 文章目录 栅压自举采样电路 bootstrap技术 一 电路结构 二 工作原理 一 电路结构 二 工作原理
  • 【C++初阶】右值引用

    一 什么是左值右值 一般来说能取地址的 也就是等号左边的值 比如创建的int变量是左值 而右值就是与他相反 在等号右边 并且不能被取地址 比如说数字10 一般的普通引用只能引用左值 引用和const组合在一起使用的话既可以引用左值也可以引用
  • Python求三位水仙花数

    Python求三位水仙花数 简介 水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 基础掌握 Python str 函数 https www ru
  • C++/C++11中头文件iterator的使用

  • 总结c++笔试题目

    若有以下说明和语句 请选出哪个是对c数组元素的正确引用 int c 4 5 cp 5 cp c A cp 1 B cp 3 C cp 1 3 D cp 2 正确答案 D 解析 cp c 这个语句是将数组第0行的地址赋给了cp cp 1使指针
  • Kendo UI开发教程(6): Kendo DataSource 概述

    Kendo 的数据源支持本地数据源 JavaScript 对象数组 或者远程数据源 XML JSON JSONP 支持CRUD操作 创建 读取 更新和删除操作 并支持排序 分页 过滤 分组和集合等 准备开始 下面创建一个本地数据源 1 va
  • insert into select 和 insert into values区别

    INSERT INTO SELECT语句 从一个表复制数据 然后把数据插入到一个已存在的表中 将一个table1的数据的部分字段复制到table2中 或者将整个table1复制到table2中 这时候我们就要使用SELECT INTO 和
  • RS232 Android获取串口数据

    串口 串行接口简称串口 也称串行通信接口或串行通讯接口 通常指COM接口 是采用串行通信方式的扩展接口 串行接口 Serial Interface 是指数据一位一位地顺序传送 其特点是通信线路简单 只要一对传输线就可以实现双向通信 可以直接
  • STM32 printf函数无法使用

    要想STM32使用printf函数打印 需要三个条件 条件1 魔术棒配置 条件2 有以下函数 重定向c库函数printf到串口DEBUG USART 重定向后可使用printf函数 int fputc int ch FILE f 发送一个字

随机推荐

  • Java 8:让你的代码更简洁、高效和灵活的新特性

    Java 8 企业中使用最普遍的版本 那么了解它的新特性是非常有必要的 目录 一 函数式接口 二 Lamdba表达式 三 方法引用 四 Stream API 3 1 创建 方法一 通过集合 方法二 通过数组 方法三 通过Stream的of
  • 零知识证明

    一 概念 证明者能够在不向验证者提供任何有用的信息的情况下 使验证者相信某个论断是正确的 零知识证明 Zero Knowledge Proof 起源于最小泄露证明 设P表示掌握某些信息 并希望证实这一事实的实体 设V是证明这一事实的实体 假
  • 前端例程20220728:点击涟漪效果按钮

    演示 原理 监听按钮点击事件 点击事件中获取点击位置 在点击位置生成一个元素作为水波 水波生成后通过扩散同时变透明 水波根据动画时间变透明后销毁 代码
  • 使用Kotlin 重写毕设项目

    Kotlin目前已经转正 成为 Android 开发一级语言 前段时间不忙 将毕业设计用Kotlin 进行重写 毕业设计 Java 版 https blog csdn net qq 29375837 article details 8265
  • 谁能看懂这幅图?

    谁能看懂这幅图
  • 基于MediaPlayer实现视频播放

    一 概述 一个简单的视频播放器 满足一般的需求 使用原生的 MediaPlayer 和 TextureView来实现 功能点 获取视频的首帧进行展示 网络视频的首帧会缓存 视频播放 本地视频或者网络视频 感知生命周期 页面不可见自动暂停播放
  • 51单片机入门——矩阵键盘(附51代码)

    1 硬件介绍 矩阵键盘电路图 硬件如图非常简单 将一个4 4的矩阵键盘的8个管脚引到端子上 在连接到8个I O口上 ARRAY H代表着行 ARRAY L代表着列 当行与列的电平都置低的时候 就选中的相应的矩阵按键 比如当s1按下时 ARR
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • Android系统换字体不root,安卓手机更换字体简易方法(免ROOT)

    很多童鞋都是玩机族 都喜欢diy自己的手机来追求个性 更换手机字体是大家都热衷做的事 但至于换字体的方法 很多童鞋是折腾半天都不明觉厉 有的同学利用高深的方法 先root获取手机权限啊 改系统文件啊 改这改那的终于换了字体 但有时候一重启
  • 【机器学习】6:K-近邻(KNN)算法实现手写数字识别的三种方法

    前言 本来觉得自己从数据建模转人工智能方向应该问题不大 自我感觉自己算法学的不错 结果一个K 邻近实现手写数字识别的代码就让我改了三四天 虽然网上这方面的代码是很多 但是我运行了好几个 结果都不是很理想 一次偶然的念想 为什么我不把这些代码
  • HttpRunner 的中文使用手册

    2018开工大吉 给大家送上 HttpRunner 的中文使用手册 http cn httprunner org
  • 手机端使用ghelper_Anki手机端使用指南(一)

    本篇会对如何使用手机端anki进行详解 有小伙伴询问在应用商店搜索anki找不到名字叫 anki 的软件 这里解释一下 在手机端的名字和电脑端的名字不太一样 安卓对应的名字叫做AnkiDroid IOS对应的名字叫做Ankimobile 不
  • 快速排序法

    partition函数 int partition vector
  • C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程

    1 前言 前文介绍了如何使用 高斯消元法 求解线性方程组 本文秉承有始有终的态度 继续介绍 非线性方程 的求解算法 本文将介绍 2 个非线性方程算法 牛顿迭代法 二分迭代法 牛顿迭代法 Newton s method 又称为牛顿 拉夫逊方法
  • 安装python包的方式,控制台方式以numpy安装为例

    说明 方式1 直接打开cmd 需要配置python环境 控制台输入 python m pip install package name 版本号 方式2 去网上将所需的包下载下来 链接 官方下载链接 一般是 whl格式 然后将其放在自己的路径
  • 【桥接模式】VMware虚拟机配置桥接模式

    在虚拟机配置中 桥接模式和NAT模式是两种常见的网络连接方式 区别 1 桥接模式使虚拟机直接连接到物理网络 可以与外部设备直接通信 并获取唯一IP地址 2 NAT模式使用网络地址转换器将虚拟机的网络流量转发到物理网络上 虚拟机可以与外部网络
  • 强化学习读书笔记

    强化学习读书笔记 09 on policy预测的近似方法 参照 Reinforcement Learning An Introduction Richard S Sutton and Andrew G Barto c 2014 2015 2
  • 理解区块链

    本文基本上是收集的内容汇总 略微全面一点 1 区块链的诞生 互联网上的贸易 几乎都需要借助可资信赖的第三方信用机构来处理电子支付信息 这类系统仍然内生性地受制于 基于信用的模式 区块链技术是构建比特币区块链网络与交易信息加密传输的基础技术
  • mysql InnoDB 数据存储和查找

    InnoDB 引擎数据存储 要想了解数据库 InnoDB 引擎是怎么样存储数据的 必须先了解 B Tree 了解之后才容易理解其存储原理 在 InnoDB 存储引擎中 也有页的概念 默认每个页的大小为 16K 也就是每次读取数据时都是读取
  • Element-UI中Select选择器详解

    前言 最近开发的后台管理系统项目采用Vue Element UI技术架构 在使用Elment UI中Select组件的时候遇到了比较多的操作难题 官网上关于这个组件的使用文档介绍的不是很详细 仅仅提供了一些基本用法 很多拓展场景都没有涉及到