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

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

问题描述:

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

改后效果:

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

代码如下:

1、自定义组件CascaderTextarea.vue

<template><div class="cascader-textarea-wrapper"><!-- 隐藏原生输入框的级联选择器 --><el-cascaderv-model="displayText":options="options":props="props"@change="handleChange"ref="cascaderRef"class="hidden-cascader":value="materialName"/><!-- 自定义文本区域 --><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>

相关文章:

  • 【计算机网络】第3章:传输层—TCP 拥塞控制
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 容器(Container)语法知识点及案例代码详解(4)
  • matlab模糊控制实现路径规划
  • haribote原型系统改进方向
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
  • 通光散基因组-文献精读139
  • Mask篇 (含引导层、不规则遮罩)
  • 2025 Vscode插件离线下载方式
  • sql入门语句-案例
  • 【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)
  • 网络编程之网络基础
  • C++ 新特性详解:Lambda 表达式全解析(含实战案例)
  • 概念全解析:结构化数据,半结构化数据,非结构化数据分别是什么意思?
  • 软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
  • http协议,get,post两种请求方式
  • STM32学习之看门狗(理论篇)
  • 使用ArcPy进行栅格数据分析
  • Linux——TCP和UDP
  • Elasticsearch中的刷新(Refresh)和刷新间隔介绍
  • 百度公司做网站可靠吗/seo扣费系统源码
  • 网站建设备案优化/百度浏览器官网下载并安装
  • 做网站图片自动切换/网络营销模式有哪几种
  • 云南SEO网站建设/软文网官网
  • 如何做竞价网站数据监控/农产品营销方案
  • 简单的美食网站模板/怎么开网店新手入门