位置: IT常识 - 正文

ElementUI实现在下拉列表里面进行搜索(elementui怎么样)

编辑:rootadmin
ElementUI实现在下拉列表里面进行搜索 分析:

推荐整理分享ElementUI实现在下拉列表里面进行搜索(elementui怎么样),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:element-ui,elementui怎么样,element-ui,elementui rule,elementui 3,elementui ts,elementui怎么样,elementui怎么样,内容如对您有帮助,希望把文章链接给更多的朋友!

首先我们需要实现上图的效果,然后Element-UI的el-select是没有的,所以需要自己写我们需要用到el-popover组件,然后使用它的v-model="visible"来实现控制显示我们在el-popover的slot="reference" 放一个el-select使用popper-append-to-body="false"不需要插入浮动元素使用popper-class="hide-popper"定义浮窗class为hide-popper,并设置 display:none,这样选中了就不会存在el-select的下拉选项el-option 循环下面选择的list里面的元素,这样就可以在el-select展示选中的并存在删除el-select双向绑定的就是自定义选择的数组html:<template><div class="arrbox"><!-- 通过visible控制显示还是隐藏 --><el-popoverv-model="visible"placement="bottom-start"width="auto"><div slot="reference" class="check-select"><!-- popper-append-to-body:不需要插入浮动元素,popper-class:设置类名并隐藏 --><el-selectref="select"v-model="currentval":style="{width:`${width}px`,height:`${height}`}"multiple:placeholder="placeholder":popper-append-to-body="false"popper-class="hide-popper"style="width:100%"@visible-change="visibleChange"@focus="getFocus"> <el-optionv-for="item in selectItem":key="`${item.value}_k`":label="item.label":value="item.value"/></el-select></div><!-- selectBxClick让select强制选中 --><div class="selectMain" :style="{'min-width':`${width-20}px`}" @click="selectBxClick"><div class="seachButton"><el-selectv-model="seachValue"placeholder=" 请选择筛选"style="width:70%;margin-right:10px;max-width:195px"@visible-change="selectBxClick()"><el-optionv-for="item in seachList":key="item.value":value="item.value":label="item.label"/></el-select><div class="btn" @click="seachBtn">搜索</div></div> <div class="selectDiv"> <div v-for="item in list.filter(n=>n.value=='all')" :key="item.value" class="list" :class="[currentval.indexOf(item.value)!=-1?'selected':'',item.value=='all'?'allCheck':'']" @click="clickItem(item)">{{ item.label }}</div> <div class="selectDivAuto"> <div v-for="item in list.filter(n=>n.value!='all')" :key="item.value" class="list" :class="[currentval.indexOf(item.value)!=-1?'selected':'',item.value=='all'?'allCheck':'']" @click="clickItem(item)">{{ item.label }}</div> </div> </div></div></el-popover></div></template>js:ElementUI实现在下拉列表里面进行搜索(elementui怎么样)

使用getFocus获取是否聚焦,聚焦了让visible=true,这样就可以显示出自定义的下拉选择项

通过visibleChange实施监听el-select,控制el-popover显示

在点击自定义的下拉选择项时,通过@click="selectBxClick"让el-select一直聚焦,这样箭头就会一直向上

通过 @click="seachBtn"和getList获取列表,具体需要自己去自定义

// 模拟获取的数据const seachClickList = [{value: '1',label: '测试1',type: '1'},{value: '2',label: '测试2',type: '1'},{value: '3',label: '测试3',type: '1'},{value: '4',label: '测试4',type: '2'},{value: '5',label: '测试5',type: '2'},{value: '6',label: '测试6',type: '2'},{value: '7',label: '测试7',type: '2'}]export default {model: {prop: 'parentArr',event: 'change-parentArr'},props: {parentArr: {type: Array,default() {return []}},// 传入选中的item,主要时防止list里面没有选中的数据parentSelectItem: {type: Array,default() {return []}},width: {type: Number,default: 300},height: {type: Number,default: 30},placeholder: {type: String,default: '请输入'}},data() {return {seachList: [{value: '1',label: '条件一'},{value: '2',label: '条件二'}],visible: false,currentval: [],list: [],selectItem: [],seachValue: '1'}},watch: {seachValue: {handler(value) {this.getList(value)},deep: true,immediate: true},parentArr: {handler(value) {this.currentval = value},deep: true,immediate: true},parentSelectItem: {handler(value) {this.selectItem = value.map(n => { if (n.value == 'all') { n.label = '全部' } return n })},deep: true,immediate: true},currentval: { handler(value) { this.$emit('change-parentArr', value) }}},created() {},methods: {getList(value) { this.list = [{ label: '全部', value: 'all' }, ...seachClickList.filter(n => n.type == value)] this.getSelectItem()},// 获取选中的itemgetSelectItem() { const noItemList = this.currentval.map(n => { if (this.selectItem.findIndex(i => i.value == n) == -1) { return n } return null }).filter(n => n != null) noItemList.forEach(item => { const index = this.list.findIndex(i => i.value == item) if (index != -1) { this.selectItem.push(this.list[index]) } })},getFocus() { this.visible = true},visibleChange(data) { this.visible = data},selectBxClick() { // 避免点击框体时组件消失 this.$refs.select.visible = true},// 选择clickItem(item) { const index = this.currentval.indexOf(item.value) if (index == -1) { if (item.value == 'all') { this.currentval = ['all'] this.selectItem = [{ label: '全部', value: 'all' }] } else { this.currentval.push(item.value) this.selectItem.push(item) const currentvalIndex = this.currentval.indexOf('all') const selectItemIndex = this.selectItem.findIndex(n => n.value == 'all') if (currentvalIndex != -1 && selectItemIndex != -1) { this.selectItem.splice(selectItemIndex, 1) this.currentval.splice(currentvalIndex, 1) } } } else { const itemIndex = this.selectItem.findIndex(n => n.value == item.value) this.selectItem.splice(itemIndex, 1) this.currentval.splice(index, 1) } },// 搜索seachBtn() { this.getList()}}}

css:

selected属性使用了el-select的样式,让样子尽量一致.arrbox {display: inline-block;}.check-select{::v-deep.hide-popper{display: none;}}::v-deep .el-input__suffix{i:not(.el-select__caret){display: none;}}.selectMain {width: 100%;height: 100%;.seachButton{width: 100%;align-items: center;display: flex;div.btn{width: 25%;max-width: 70px;max-width: 80px;height: 40px;display: flex;align-items: center;justify-content: center;font-size: 12px;color: #fff;background-color: #409EFF;border-radius: 5px;cursor: pointer;}}.selectDiv{ width: 100%; max-width: 500px; margin-top: 10px; padding: 0 10px 0 0; .list{ width: 100%; padding: 10px 20px 10px 10px; color: #666; cursor: pointer; position: relative; &.selected{ color: #409EFF; &::after{ position: absolute; right: 0px; top: 50%; transform: translateY(-50%); font-family: element-icons; content: "\e6da"; font-size: 12px; font-weight: 700; -webkit-font-smoothing: antialiased; } } } .selectDivAuto{ width: calc(100% + 15px); max-height: 300px; overflow-y: auto; .list{ padding: 10px 30px 10px 10px; &.selected::after{ right: 10px; } } } }}.allCheck{border-bottom: 1px solid rgb(228, 225, 225);}

使用

<template><seachSelectInput v-model="from.tag" :parentSelectItem='selectItem' :width="302" placeholder="请选择标签" /></template><script>import seachSelectInput from ./seachSelectInput'export default {components: {seachSelectInput},data(){return{from:{tag:['1']},selectItem:[{value: '1',label: '测试1'}]}}}
本文链接地址:https://www.jiuchutong.com/zhishi/299521.html 转载请保留说明!

上一篇:GPU版本安装Pytorch教程最新方法(gpu版本的pytorch)

下一篇:基于chatGPT设计卷积神经网络

  • 如何为文件夹加密(如何为文件夹加密)(如何为文件夹加密吗)

    如何为文件夹加密(如何为文件夹加密)(如何为文件夹加密吗)

  • 荣耀magic4可以升级鸿蒙系统吗(荣耀magic4可以升级magicos)

    荣耀magic4可以升级鸿蒙系统吗(荣耀magic4可以升级magicos)

  • 花呗怎么手动申请提额呢(花呗怎么手动申请还款)

    花呗怎么手动申请提额呢(花呗怎么手动申请还款)

  • 唯品会自动抢货能抢到吗(唯品会自动抢货成功率多大)

    唯品会自动抢货能抢到吗(唯品会自动抢货成功率多大)

  • 荣耀V9没机会升级EMUI10了吗(荣耀v9有望升级安卓10吗)

    荣耀V9没机会升级EMUI10了吗(荣耀v9有望升级安卓10吗)

  • 抖音怎么找刷过的记录(抖音怎么找刷过去的视频)

    抖音怎么找刷过的记录(抖音怎么找刷过去的视频)

  • 家里拉网线怎么弄(家里怎么拉网线)

    家里拉网线怎么弄(家里怎么拉网线)

  • 微信昵称可以加好友吗(微信昵称可以加进去的符号)

    微信昵称可以加好友吗(微信昵称可以加进去的符号)

  • qq和微信的步数不一致原因(qq步数与微信步数相差太多)

    qq和微信的步数不一致原因(qq步数与微信步数相差太多)

  • 华为cdyan00是什么型号(cdyan00是华为哪个型号)

    华为cdyan00是什么型号(cdyan00是华为哪个型号)

  • 照片里的字怎么变成文字(照片里的字怎么反过来)

    照片里的字怎么变成文字(照片里的字怎么反过来)

  • 双十一用红包的钱可以退款吗(双十一用红包的订单退款了怎么办)

    双十一用红包的钱可以退款吗(双十一用红包的订单退款了怎么办)

  • 电脑做系统做一半蓝屏(电脑重装系统装到一半关机了怎么办)

    电脑做系统做一半蓝屏(电脑重装系统装到一半关机了怎么办)

  • 爱奇艺视频比例怎么调(爱奇艺视频比例多少好)

    爱奇艺视频比例怎么调(爱奇艺视频比例多少好)

  • 显卡是用来连接主机和什么的接口电路(显卡是跟啥连接的)

    显卡是用来连接主机和什么的接口电路(显卡是跟啥连接的)

  • 手机流量1g是多少兆(手机流量1g是多少mg)

    手机流量1g是多少兆(手机流量1g是多少mg)

  • 微信怎么设置一直忙线(微信怎么设置一个人语音通话免打扰)

    微信怎么设置一直忙线(微信怎么设置一个人语音通话免打扰)

  • 苹果手机亮度怎么固定(苹果手机亮度怎么会自动变暗)

    苹果手机亮度怎么固定(苹果手机亮度怎么会自动变暗)

  • ps图层详解(ps图层使用技巧)

    ps图层详解(ps图层使用技巧)

  • 艾维奇标志怎么打出来(艾维奇 标志)

    艾维奇标志怎么打出来(艾维奇 标志)

  • word文字效果怎么设置(word文字效果怎么设置为发光)

    word文字效果怎么设置(word文字效果怎么设置为发光)

  • 苹果手机迅雷安装失败怎么回事(苹果手机迅雷下载安装)

    苹果手机迅雷安装失败怎么回事(苹果手机迅雷下载安装)

  • oppoa5隐藏的照片怎么找出来(oppoa5隐藏照片怎么找)

    oppoa5隐藏的照片怎么找出来(oppoa5隐藏照片怎么找)

  • 双行标题怎么写(双行标题格式例文)

    双行标题怎么写(双行标题格式例文)

  • 抖音喜欢的视频怎么隐藏(抖音喜欢的视频别人能看到吗)

    抖音喜欢的视频怎么隐藏(抖音喜欢的视频别人能看到吗)

  • 小米8隐私设置在哪里(小米隐私设置在哪里开)

    小米8隐私设置在哪里(小米隐私设置在哪里开)

  • DEDECMS织梦整站动态化或整站静态化设置教程(2020织梦建站教程全集)

    DEDECMS织梦整站动态化或整站静态化设置教程(2020织梦建站教程全集)

  • 营业收入净额是营业总收入吗
  • 外销客户付的模具费如何入账
  • 网上社保增减员操作流程
  • 新公司注册完成的后续流程
  • 对公账户可以支付给个人吗
  • 会计凭证整理的要求有哪些
  • 已经报销的发票还会查吗
  • 收到土地使用权转让金会计分录
  • 企业所得税业务费扣除标准
  • 货款尚未收到用什么记账凭证
  • 前年的票发现要不得,可以冲红吗
  • 关于转让费的问题
  • 旅游服务费和旅游费区别
  • 公司账户怎么走账
  • 企业车辆保险费要按什么交印花税的
  • 个体工商户需要做账吗
  • 小规模零申报资产负债表报错了要交印花税吗
  • 倒发票怎么倒出钱来
  • 解决的英文
  • window10开始菜单
  • 在windows7提供了一种什么技术
  • 代开的发票没有人名行不行?
  • 如何修复win11系统
  • mac系统怎么添加网络映射
  • 办理发票缴销需要提供的资料
  • 罚款在企业所得税前可以扣除吗
  • 什么叫股权溢价之谜?
  • 建筑业红冲发票如何处理
  • php面向对象和面向过程
  • 调整以前年度损益调整分录费用调增
  • 基于web的网站设计与实现
  • 农产品收购发票是普票还是专票
  • 增值税政策执行口径存在的问题及建议
  • 印花税调低
  • 已交土地使用金的划拨商品房与商品房的的区别
  • 申报纳税的税务机关
  • 赔偿客户款应该怎么记账
  • 购买净资产为负数怎么办
  • 跨境收入免增值税需做备案吗
  • 预缴增值税后期如何处理
  • 研发费用不一致说明
  • 汽车租赁入什么费用
  • 跨年度发票的报表怎么填
  • 如果对装修费用有异议怎么办
  • 电子发票不小心删掉了怎么办
  • 股权投资如何记账
  • 增值税普通发票怎么开
  • 开票软件升级包
  • 收入的利息如何计算
  • 金蝶银行存款日记账
  • 实收资本能直接转账吗
  • 高新企业研发费用占比
  • 产品成本核算方法受那些因素影响
  • mysql必知必会读后感2000字
  • mysql5717安装及配置超详细教程
  • w10看不到我的电脑
  • xp关闭防火墙命令
  • win7装vmware
  • windows.h在linux中
  • linux tar压缩文件命令
  • wmiex.exe是什么程序
  • linux系统主要用途
  • dos强制删除文件命令
  • cocos2d游戏源码
  • unity中国代理
  • jquery移动端ui
  • shell脚本实现同时多台远程主机执行命令的代码分享
  • pyinstaller如何用
  • ztree getnodebytid
  • Node.js中的事件循环是什么
  • python基础教程 入门教程
  • JavaScript获取网页内容
  • python 包 __init__
  • 为什么python那么难
  • 广西国家税务局于红林
  • 深圳税务局官方客服电话
  • 医院黄票可以报销吗
  • 税务系统个人业务自传
  • 普洱房产管理局官网
  • 建筑行业的公司近期出现的问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设