首页 前端知识 关于vue使用el-cascader获取值的问题【超详细】

关于vue使用el-cascader获取值的问题【超详细】

2024-05-07 13:05:23 前端知识 前端哥 470 697 我要收藏

要解决的2个问题

问题1. 通过vue 的el-cascader组件,如何获取到级联值的信息?
1.1 可以选则多个级联选项的情况 【多选】
1.2 单选的情况

问题2. 如何回显信息?

问题1.1的解决方案,话不多说直接上代码

<div class="my-form-row">
   <el-form-item class="profession" prop="speciality">
         <el-cascader ref="mycascader" @change="changeCasc"  v-model="form.speciality" :options="specialityList" :props="deptsProps" clearable style="width: 504px;"></el-cascader>
     </el-form-item>
 </div>

js

data(){
	// cascader 属性
	deptsProps: {
		value: "code",
		label: "name",
		children: 'children',    //子元素字段名
	    multiple: true,
	    expandTrigger: 'hover',
	},
	
	form:{
       speciality:[]
   },
   
   specialityList: [],         // 申请专业列表[从后端获取的数据,并处理成树形结构的列表]

}

2 用cascader组件的change方法,有回调

这里有个坑:一定要用this.$nextTick()否则出现选中的数据跟打印的数据不一致的问题,因为dom没有更新完成就获取

在这里插入图片描述

methods:{
// 选择 申请专业
     changeCasc(selectValuesArr){
      	console.log("选中的值:", selectValuesArr)
		this.$nextTick(()=>{
                // 级联多选专业 的最后一项的数组
                var newArr = []

                this.form.speciality.map((item) => {
                    newArr.push(item[item.length-1])
                })
                console.log('arr new', newArr)
				

                // 获取申请专业的label文字
                //this.specialiityNameList = this.getSpecialiityName(this.specialityList, selectValuesArr)
                //console.log(this.specialiityNameList)
                //if(this.specialiityNameList.length > 5) {
                //    this.specialiityNameList = this.specialiityNameList.splice(0,5)
                //    console.log(this.specialiityNameList.length)
                //}
                
		})
	},
}

到这里就问题1,获取的问题就欧啦


问题1.1的解决方案,单选的情况

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

再看一个的例子

<el-form-item label="组织机构" prop="organizationId">
	<el-cascader ref="mycascader" @change="changeCasc()" v-model="form.organizationId" :options="organizationList" :props="deptsProps" clearable style="width: 100%;"></el-cascader>
</el-form-item>
data() {
	//表单数据
	form: {
		parentId:0,//父类id 默认0(顶级)
		parentName:"顶级类",
		organizationId: "",//组织机构
		code: "",//角色编码
		name: "",//角色名称
		type:0,//类型
		description: "",//描述
		menuIds:[],//菜单权限
	},
	deptsProps: {
		value: "id",
		label: "name",
		checkStrictly: true,
		children: 'children',    //子元素字段名
	},
	organizationList:[],        // 树形结构
}
methods:{
	changeCasc(){
		this.$nextTick(()=>{
			let thsAreaCode = this.$refs['mycascader'].checkedValue
			this.form.organizationId=thsAreaCode[thsAreaCode.length-1]   // 取数组的最后一个
		})
	}
}

额外转为树结构的通用方法如下:

// 把数据处理成树状结构
translator(parents, childrens) {
	parents.forEach(item => {
		childrens.forEach(items => {
			if (items.parentId === item.id) {
				item.children ? item.children.push(items) : item.children = [items];
				this.translator([items], childrens);
			}
		})
	})
},
getTreeData(arr) {
	let parents = arr.filter(item => item.parentId===0); //取出根节点
	let childrens = arr.filter(item => item.parentId!==0);//去除子节点
	this.translator(parents, childrens)
	return parents
},

organizationList 格式如下
在这里插入图片描述


问题2的解决方案,话不多说直接上代码

回显其实也很简单,上面changeCasc()方法获取到的整个数组信息,其实已经用this.form.speciality 进行双向绑定了,所以我们只需要将这个字段的整个信息传给后端,保存起来,然后查询的时候在返回赋值给this.form.speciality 就行

这种数据我这里贴一张图,是类似这样的多维度数组

在这里插入图片描述

这里解决一个疑惑,

上述changeCasc方法中 的newArr 其实是二维数组的每一项的最后一个值构成的数组,这是我传给后端的数据,这里可以根据你们自己的需求来定噢,如下图所示,这些值构成的新数组

在这里插入图片描述

至此,回显问题也已经欧拉
························································································································································································

后面几天我会继续更新滴,还有一些骚操作功能噢~

转载请注明出处或者链接地址:https://www.qianduange.cn//article/7365.html
标签
评论
发布的文章

Pycharm创建json文件类型

2024-05-12 00:05:50

C#Post请求,带json参数。

2024-05-12 00:05:28

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!