完美解决el-cascader回显失败问题

news2025/2/25 8:12:13

项目场景:

项目场景:接手了一些老项目,需要做一些日志相关的操作,从后台日志跳转到相应页面要带上原来的请求参数,涉及到一个回显问题


问题描述

Element-UI的 <el-cascader /> 这个组件,赋值之后它不会回显!而且后端返回的值只有最后一级的id,可是一个劲看文档、找资料浪费大半天,所以总结了一个比较完美的办法


原因分析:

value 属性才是回显的关键,只有绑定了value属性才会让 <el-cascader /> 回显(单选情况下是一维数组、多选是二维数组),而且数组中的值一定是最后一级的id加上它父级的id组成

在这里插入图片描述

在这里放一下模拟的数据

depart_check: [],
options: [
	{
	    value: 1,
	    label: '东南',
	    children: [
	    	{
		        value: 11,
		        label: '上海',
		        children: [{
		            value: 111,
		            label: '黄浦区'
		        }, {
		            value: 112,
		            label: '静安区'
		        }, {
		            value: 113,
		            label: '虹口区'
		        }, {
		            value: 114,
		            label: '长宁区'
		        }]
		    }, {
		        value: 12,
		        label: '江苏',
		    }, {
		        value: 13,
		        label: '浙江',
		    }
	    ]
	}, 
	{
	    value: 2,
	    label: '西北',
	    children: [{
	        value: 21,
	        label: '陕西',
	    }, {
	        value: 22,
	        label: '新疆维吾尔族自治区',
	    }]
	}
]

解决方案:

由于后端返回来的只有最后一级的id,所以我们需要写一个递归来拿到最后一级id和它父级id的数组
废话不多说直接上代码

/*
* @param  list 数据列表
* @param  id 后端返回的id
**/
getParentsById(list, id) {
    for (let i in list) {
        if (list[i].value == id) {
            //查询到就返回该数组对象的value
            return [list[i].value]
        }
        if (list[i].children) {
            let node = this.getParentsById(list[i].children, id)
            if (node !== undefined) {
                //查询到把父节把父节点加到数组前面
                node.unshift(list[i].value)
                return node
            }
        }
    }
},

方法有了之后就开始解决问题

一、多选赋值回显

因为多选的时候绑定的value是个二维数组
比如随便选俩,change事件拿到的值就是[[1,11,111], [1,12] ]

// 选择单位
  handlechangedepatt(v) {
  	  console.log(v)
      this.depart_check = v
  },

在这里插入图片描述
在这里插入图片描述

因为后端只会返回来111、12两个值还是字符串格式"111,12",所以处理开始

	let _depart_check = data.depart_id ? data.depart_id.split(",").map(i => Number(i)) : []
	let _arr = []
	// 使用上面写的方法 getParentsById 找出父级id并组合
	_depart_check && _depart_check.map(i => _arr.push(this.getParentsById(this.options, i)))
	console.log("_arr: ",_arr)
	this.depart_check = _arr

控制台打印拿到的_arr,完美和change事件里拿到的值是一个格式,这样回显就完成了

在这里插入图片描述

这里有一个小问题就是,拿到的id可能很多个,getParentsById方法只能一个一个找父级id,所以需要依次获取

二、单选赋值回显

方法和多选类似,因为单选change选中的值是一位数组,比如:[ 1,11,111 ]所以当拿到后端id之后不需要太多处理,只需要根据id和数据拿到一个一维数组的数据就行了,就不多解释了

	let _depart_check = data.depart_id || ""
	let _arr = []
	_arr = this.getParentsById(this.options, _depart_check )
	this.depart_check = _arr

总结

以上就是el-cascader回显失败的解决办法,可能有些小地方不够严谨,但是大问题得到了解决。

感谢

getParentsById方法有参考 爱吃蛋炒饭加蛋 大哥的帖子 js递归查询id所对应的节点,查询该节点的父节点,查询该节点的所有子节点
新定义定义一个 _arr是因为直接map赋值是不生效的,这里有参考 i_am_a_div_日积月累_ 大哥的帖子 el-cascader回显失败;el-cascader回显不出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端与后端传递数据 — — JSON

前端与后端传递数据 — — JSON 1 前端传送JSON数据给后端 1.1 application/x-www-form-urlencoded默认格式 1.1.1 通过HttpServletRequest获取数据 /*** 通过request获取数据* param request* return*/PostMapping("/testDefaultWithNoAnno1")public String test…

自主Web服务器Http_Server

目录自主web服务器背景目标描述技术特点项目定位项目实现过程创建HttpServer基础框架TcpServer.hppHttpServer.hppLog.hppProtocol.hpp解析C端发来的HTTP报文MSG_PEEK标志位Util.hpp构建请求与响应类读取,解析请求构建响应读取请求解析请求构建响应stat系统函数发送响应sendfil…

使用uni-app开发App简易教程

使用uni-app开发App简易教程前言app端开发步骤1、 申请uniapp开发者账号2、登录后开始新建应用3、下载安装 HBuildder X 。4、新建项目5、开启webview&#xff0c;在pages-index里面写一点点代码6、配置mainifest.json7、打包h5工程配置在html中引入uniapp-sdk解决后退问题上架…

【vue2小知识】实现directive自定义指令的封装与全局注册

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;将我们的自定义指令directive统一管理并批量注册 目录 一、directive自定义指令介绍 二…

Cannot read properties of undefined (reading ‘validate‘)“

1、注意两个地方 1、ref前面 加冒号“&#xff1a;”&#xff0c;还是不加冒号。 2、this.$refs[value].validate()>&#xff08;&#xff09;&#xff0c;更改为this.$refs[value].validate()>(), 不排除this.$refs[value].validate()>(),有时候不会报错 2、示范代码…

解决本地浏览器运行项目时的跨域问题Access to XMLHttpRequest at ‘file:///C:/Users/Len/Desktop/%E5%8F%AF%E4%BF%AE%E6%94%

解决本地浏览器运行项目时的跨域问题-Access to XMLHttpRequest at ‘file:///C:/Users/Len/Desktop/%E5%8F%AF%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE/dist/model/model.gltf.xz’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supp…

npm sill idealTree buildDeps 安装踩坑指南(详细版)

背景&#xff1a; 已通过nvm安装node 18.8 需要运行 npx create-react-app demo01 首次提醒npm版本过低&#xff0c;但是更新npm失败&#xff0c;并且不再报错&#xff08;安装其他包同样不报错&#xff09; 且换源无果&#xff08;更换淘宝源、清除缓存没效果&#xff09;&am…

【产品新体验】CSDN. 云IDE体验与功能使用教程(保姆级教程)

文章目录前言一、认识云IDE1.1、CSDN.开发云1.2、秘钥管理二、实战-使用云IDE2.1、初步实战springboot-demo&#xff08;clone默认模板代码&#xff09;2.1.1、新建工作空间2.1.2、启动springboot-demo项目2.1.3、编写一个helloworld接口2.2、运行前端工程项目2.2.1、初步尝试—…

Node.js卸载与重装,zip与msi安装详解

Node js卸载与重装&#xff0c;zip与msi安装详解 文章目录Node js卸载与重装&#xff0c;zip与msi安装详解卸载安装选择msi下载安装第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;选择zip压缩包安装&#xff08;选择msi安装的已可以看下这个&#xff09;第一步&#…

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)

基于 Vue3.x Vant UI 的多功能记账本&#xff08;四&#xff09; 文章目录基于 Vue3.x Vant UI 的多功能记账本&#xff08;四&#xff09;项目演示1、登录注册页面2、图片验证码3、修改 axios4、写到最后&#xff08;附源码&#xff09;系列内容参考链接基于 Vue3.x Vant U…

Vue3预览并打印PDF的两种方法

项目场景&#xff1a;后台接口请求数据&#xff0c;返回PDF文档的链接&#xff0c;在vue3页面可预览和打印该PDF。 在之前的Vue2项目中&#xff0c;预览并打印PDF用的是vue-pdf这个插件&#xff0c;但在vue3中是不支持的&#xff0c;只能换个插件了&#xff0c;于是经过测试&a…

jquery怎么给元素设置属性

设置方法&#xff1a;1、使用attr()方法&#xff0c;语法“$(selector).attr(属性名,值)”或“$(selector).attr({属性名:值;})”&#xff1b;2、使用prop()方法&#xff0c;语法“$(selector).prop(属性名,值)”。 1、使用attr()方法 attr() 方法设置或返回被选元素的属性值…

共享主机和 WordPress 主机之间的区别

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且…

npm install 报错(npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path D:\node.js\odejs)

今天我正好要学习TS需要typeScript这个插件但是我用npm i typescript -g 这个命令安装的时候报错&#xff0c;我花了1个时才解决这个问题&#xff0c;下面我为大家提供一些解决方案 1.全部错误install 2.错误详解 该错误发生在修改npm的全局安装路径之后&#xff0c;再执行npm…

【Web 三件套】个人简单博客系统页面搭建(附源码)

文章目录1. 成品展示2. 知识准备3. 博客系统页面搭建3.1 基本介绍3.2 博客列表页3.3 博客详情页3.4 博客登录页3.5 博客编辑页3.6 公共页面样式3.7 markdown 编辑器引入4. 总结1. 成品展示 以下为个人搭建的一个简单博客系统页面&#xff0c;以后会不断改进&#xff0c;并且与…

VsCode镜像下载(国内镜像源,高速秒下)

VsCode镜像下载&#xff08;国内镜像源&#xff0c;高速秒下&#xff09;vscode官方网站下载速度太慢&#xff0c;非正规网站又不太敢下&#xff0c;通过镜像源下载就好了。你们不介意版本的话&#xff0c;下面是1.63版本的链接&#xff08;直接复制下载就好了&#xff09;&…

猿创征文|一文带你了解前端开发者工具

前端开发者工具目录一、前言二、前端开发者工具——编译器&#xff08;含插件&#xff09;1、VS Code2、VS Code 必备插件3、WebStorm三、前端开发者工具——UI 框架工具1、Element2、Vant四、前端开发者工具——API 调试工具1、ApiPost五、写在最后&#xff08;总结&#xff0…

Module not found: Error: Can‘t resolve “xxx“ in “xxx“导致该问题的解决方案

先看报错提示 根据报错提示反应的情况是&#xff1a;找不到模块&#xff1a;错误&#xff1a;无法解析 在遇到报错时应该仔细阅读报错提示&#xff0c;这样解决起来也不会没有头绪 在红色遮挡下有该报错出现的主要原因 在此处我们谈论一下解决该类报错的几种方法 1&#xff…

uniapp 总结篇 (小程序)

前期概述&#xff1a;做了很长时间的小程序了&#xff0c;在此做一个完整的项目总结&#xff0c;希望可以帮助到正在学习、开发的小伙伴。此篇文章并不涉及一些原理&#xff0c;更重要的是帮助大家实现功能、流程。 uniapp 还是很强大的 可以开发 小程序、h5、pc、app 一、创…

Tomcat安装使用与部署Web项目的三种方法

✅作者简介&#xff1a;C/C领域新星创作者&#xff0c;为C和java奋斗中 ✨个人社区&#xff1a;微凉秋意社区 &#x1f525;系列专栏&#xff1a;MySql一点通 &#x1f4c3;推荐一款模拟面试、刷题神器&#x1f449;注册免费刷题 &#x1f525;前言 今天带来Tomcat的安装教程&a…