当前位置: 首页 > news >正文

解决el-cascader组件下拉选项过长,数据回显无法换行显示的问题

问题描述:

需求是需要一个级联选择框,选择框有一定的高度,当选项比较长的时候,回显数据可以在选择框中不被隐藏,换行显示。el-cascader组件如下,满足不了需求,采用封装组件的方法来实现。
在这里插入图片描述

改后效果:

在这里插入图片描述
回显数据效果:
在这里插入图片描述

代码如下:

1、自定义组件CascaderTextarea.vue

<template><div class="cascader-textarea-wrapper"><!-- 隐藏原生输入框的级联选择器 --><el-cascaderv-model="materialName":options="options":props="props"@change="handleChange"ref="cascaderRef"class="hidden-cascader"/><!-- 自定义文本区域 --><textareav-model="materialName"class="custom-textarea"placeholder="请选择"@focus="handleFocus"@click="handleClick"@input="handleSearch"rows="3"></textarea></div></template><script>export default {model: {prop: 'materialName',event: 'change'},props: {materialName: {type: String,default: ''},// 接收父组件传递的选项数据options: {type: Array,required: true},// 级联选择器配置项(可选)cascaderProps: {type: Object,default: () => ({})}},data() {return {selectedValue: [],       // 存储实际选择的路径值displayText: '',         // 文本区域显示的内容props: {expandTrigger: 'hover',emitPath: true,        // 返回完整路径...this.cascaderProps  // 合并父组件传递的配置},filteredOptions: [],optionsCopy:[],};},methods: {handleSearch() {if(this.materialName==''){this.$emit('change', this.materialName)this.options=this.optionsCopy;}if (!this.materialName) {this.filteredOptions = [];return;}this.options = this.flattenOptions(this.options).filter(option => option.label.includes(this.materialName));},flattenOptions(options, parent = null) {return options.reduce((acc, option) => {const flatOption = {...option,parent};if (option.children) {return [...acc,flatOption,...this.flattenOptions(option.children, option)];}return [...acc, flatOption];}, []);},// 处理值变化(同步显示文本)handleChange(value) {if (!value || value.length === 0) {this.displayText = '';return;}// 获取选中节点的标签路径const node = this.$refs.cascaderRef.getCheckedNodes()[0];if (node) {this.displayText = node.pathLabels[ node.pathLabels.length - 1];}this.$emit('change', this.displayText)},// 聚焦时展开下拉框handleFocus() {if(this.optionsCopy.length==0){var objStr= JSON.stringify(this.options);this.optionsCopy=JSON.parse(objStr);}this.$refs.cascaderRef.toggleDropDownVisible(true);},// 点击时展开下拉框handleClick() {if(this.optionsCopy.length==0){var objStr= JSON.stringify(this.options);this.optionsCopy=JSON.parse(objStr);}this.$refs.cascaderRef.toggleDropDownVisible(true);},},};</script><style scoped>.cascader-textarea-wrapper {position: relative;}/* 隐藏原生输入框 */.hidden-cascader {position: absolute;opacity: 0;pointer-events: none;}/* 自定义文本区域样式 */.custom-textarea {width: 100%;padding: 8px 15px;border: 1px solid #dcdfe6;border-radius: 4px;resize: vertical;font-family: inherit;font-size: 14px;transition: border-color 0.2s;min-height: 80px;height: 200px;text-align: center;}.custom-textarea:focus {outline: none;border-color: #409eff;}</style>

2、测试页面

<template><div><div class="container"><cascader-textarea :options="cascaderOptions":cascader-props="{ label: 'name', value: 'value' }"v-model="materialName"/></div></div>
</template><script>
import CascaderTextarea from './CascaderTextarea.vue';export default {components: { CascaderTextarea },data() {return {materialName:'五月五,粽叶香,愿您的生活如糯米般甜糯,如红枣般红火!端午安康,岁岁平安,百事‘粽’顺,幸福‘粽’在身边',cascaderOptions: [{value: 1,name: '东南',children: [{ value: 11, name: '五月五,粽叶香,愿您的生活如糯米般甜糯,如红枣般红火!端午安康,岁岁平安,百事‘粽’顺,幸福‘粽’在身边' },{ value: 12, name: '艾草青青挂门楣,龙舟竞渡逐浪飞。愿君端午享安康,吉祥如意永相随。记得吃粽佩香囊,千年习俗暖心扉' }]},{value: 2,name: '华南',children: [{ value: 21, name: '广东' },{ value: 22, name: '海南' }]}]};},methods: {}};
</script>
<style scoped>/deep/ .classRed .custom-textarea{background-color: #00FFFF;}.container{margin: auto;width: 10%;margin-top: 10%;height: 300px;
}</style>
http://www.lqws.cn/news/137341.html

相关文章:

  • JavaScript中判断两个对象是否相同(所有属性的值是否都相同)
  • 电商接口计费标准是什么?
  • 数据“出国”需办“签证”: 如何申请数据出境安全评估?
  • 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
  • Vue Router 导航方法完全指南
  • ShardingSphere 如何解决聚合统计、分页查询和join关联问题
  • DeepSeek+SpringAI实现流式对话
  • Python Day43
  • 脑机新手指南(四):新手小白入门 BCI-从认识到初体验(下)
  • Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
  • 极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)
  • Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)
  • C#Winform中DevExpress下的datagridview 特定列可编辑,其他列不可编辑
  • 链表题解——环形链表【LeetCode】
  • iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“
  • Java时间API终极指南
  • 【输入URL到页面展示】
  • django paramiko 跳转登录
  • 【使用 Loki + Promtail + Grafana 搭建轻量级容器日志分析平台】
  • grafana 批量视图备份及恢复(含数据源)
  • 【更新中】(文档+代码)基于推荐算法和Springboot+Vue的购物商城
  • 每日算法刷题Day22 6.4:leetcode二分答案3道题,用时1h30min
  • [蓝桥杯]模型染色
  • [leetcode ] 5.29week | dp | 组合数学 | 图 | 打家劫舍
  • leetcode 455. Assign Cookies和2410. Maximum Matching of Players With Trainers
  • 【unity游戏开发入门到精通——通用篇】AssetBundle(AB包)和AssetBundleBrowser的使用介绍
  • Pytest+Selenium UI自动化测试实战实例
  • 霍夫曼编码详解
  • 【SpringCloud】Nacos配置中心
  • 【仿生】硬件缺失,与组装调试,皮肤问题