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

(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束

(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束


  • 需求:按勾选的顺序给后端传值

  • 难点:在 Element UI 的 el-cascader 组件中,默认的行为是根据数据的层级结构来显示选项,用户的选择也会基于这种层级结构,el-cascader 本身并不直接支持自定义的显示顺序。


效果:

在这里插入图片描述


实现:

// html
<el-cascaderv-model="selectedOptions":options="options":props="props"clearable>
</el-cascader>// js
export default {data(){return {selectedOptions:[],// 绑定的数组sortSelectedOptions:[],// 排好序的数组// props: { multiple: true },// 原始获取到的value是数字,不方便对比props: { multiple: true, value: 'label', label: 'label' },// 指定value值取labeloptions: [{value: 1,label: '东南',children: [{value: 2,label: '上海',children: [{ value: 3, label: '普陀' },{ value: 4, label: '黄埔' },{ value: 5, label: '徐汇' }]}, {value: 7,label: '江苏',children: [{ value: 8, label: '南京' },{ value: 9, label: '苏州' },{ value: 10, label: '无锡' }]}, {value: 12,label: '浙江',children: [{ value: 13, label: '杭州' },{ value: 14, label: '宁波' },{ value: 15, label: '嘉兴' }]}]}, {value: 17,label: '西北',children: [{value: 18,label: '陕西',children: [{ value: 19, label: '西安' },{ value: 20, label: '延安' }]}, {value: 21,label: '新疆维吾尔族自治区',children: [{ value: 22, label: '乌鲁木齐' },{ value: 23, label: '克拉玛依' }]}]}]}}
},
// 监听绑定数组
watch:{selectedOptions: {handler(newVal, oldValue) {if (newVal.length > oldValue.length) {// 找到新增的项const newItems = this.findNewItems(oldValue, newVal)// 添加到排序数组中this.sortSelectedOptions.push(...newItems)}if (newVal.length < oldValue.length) {// 找到删除的项const newItems = this.findNewItems(newVal, oldValue)// 从排序数组中过滤掉被删除的项this.sortSelectedOptions = this.sortSelectedOptions.filter(item => {return !newItems.map(e => JSON.stringify(e)).includes(JSON.stringify(item))})}console.log('this.sortSelectedOptions', this.sortSelectedOptions)},deep: true}
},methods:{findNewItems(oldList, newList) {// 创建一个映射表来快速检查旧列表中的项const oldItemsMap = new Map()for (const item of oldList) {// 使用JSON.stringify作为唯一标识符(注意:如果子数组顺序重要且可能不同,这种方法可能不适用)oldItemsMap.set(JSON.stringify(item), true)}// 遍历新列表,检查哪些项不在旧列表中const newItems = []for (const item of newList) {if (!oldItemsMap.has(JSON.stringify(item))) {newItems.push(item)}}return newItems},
}

相关文章:

  • 技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)
  • Cocos Creator2D游戏开发(9)-飞机大战(7)-爆炸效果
  • 使用ImDisk将Python安装到RAM磁盘提高运行速度
  • web小游戏开发:2048(完)移动操作及动画效果
  • 巧用casaos共享挂载自己的外接硬盘为局域网共享
  • CSP 2020 第三题:表达式
  • 【时时三省】unity test 测试框架 使用 code blocks 移植(核心文件:unity.c, unity_fixture.c)
  • PCB设计
  • OS X El-Capitan 安装 virtualenvwrapper 遇到 Operation not permitted
  • 模型微调(Fine-Tuning)及其在AI中的作用(优缺点)
  • 构建智能手写数字和符号识别系统:深度学习与YOLO模型的结合
  • springboot集成canal
  • Windows系统使用内网穿透配置Mysql公网地址实现IDEA远程连接
  • 【持续监控与反馈】DevOps中的监控与反馈机制
  • TypeScript 装饰器详解
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Babel配置的不完全指南
  • Druid 在有赞的实践
  • isset在php5.6-和php7.0+的一些差异
  • Iterator 和 for...of 循环
  • Java超时控制的实现
  • Next.js之基础概念(二)
  • react 代码优化(一) ——事件处理
  • react-native 安卓真机环境搭建
  • SAP云平台里Global Account和Sub Account的关系
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vue总结
  • 高度不固定时垂直居中
  • 使用common-codec进行md5加密
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 在Mac OS X上安装 Ruby运行环境
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 选择阿里云数据库HBase版十大理由
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #DBA杂记1
  • #QT项目实战(天气预报)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022 CVPR) Unbiased Teacher v2
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (3)选择元素——(17)练习(Exercises)
  • (libusb) usb口自动刷新
  • (void) (_x == _y)的作用
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)Linux——Linux常用指令
  • (二)正点原子I.MX6ULL u-boot移植
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • .bat文件调用java类的main方法
  • .gitignore文件设置了忽略但不生效
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Redis的秒杀Dome和异步执行