element Cascader 级联选择器,选中样式回显处理

记录一下Cascader 级联选择器,手动选择时选中样式没有问题,但是从服务器获取保存数据赋值后出现的选择样式问题
html部分
emitPath:在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false,则只返回该节点的值,接口只需要选中节点值

<el-form-item label="分类" prop="classifyId" class="tree_select">
   <el-cascader
   :filterable="true"
   v-model="ruleForm.classifyId"
   :options="treeData"
   :props="defaultProps"
   :emitPath="false"
    @change="handleChange"
    ref="cascader"></el-cascader>
</el-form-item>

js部分

data(){
	return{
		  treeData: [], //分类多级数据
	      defaultProps: {
	        children: 'children',
	        label: 'classifyName',
	        value: 'classifyId',
	      },
      },
   mounted(){
   	if(this.id){
   		//获取编辑数据
   		//this.ruleForm.classifyId = 获取的数据
   		//获取分类全路径+选中样式
   		this.classifyIdChange(this.ruleForm.classifyId);
   	}
   },
   methods:{
    //分类改变
    classifyIdChange(val) {
      console.log(this.$refs.cascader.getCheckedNodes(), '选择节点', val);
      if (val) {
      //通过ref,获取选择的节点,getCheckedNodes(leafOnly):leafOnly 是否只是叶子节点,默认值为 false
        let nodes = this.$refs.cascader.getCheckedNodes();
        this.ruleForm.classifyId=[]
        nodes[0].pathNodes.forEach((item) => {
          //选中回显样式关键
          this.ruleForm.classifyId.push(item.value);
        });
      } else {
        this.$set(this.ruleForm, 'classifyId', '');
      }
    },
    },
   }
}

注意!!!
由于处理编辑时的选中样式,this.ruleForm.classifyId的值变为了数组,提交数据时需要处理一下

if (Array.isArray(this.ruleForm.classifyId)) {
            //处理级联回显样式产生的数据问题(接口只传最后一级id)
            this.ruleForm.classifyId = this.ruleForm.classifyId[this.ruleForm.classifyId.length - 1];
          }
el-cascader 级联选择器Element UI中用于实现级联下拉选择的一种组件。它能够处理多个层级的选项,并且能够通过简单的配置来实现数据的。在实际开发中,通常需要根据后端返的数据来示已经选择的值,或者在表单编辑时示当前已有的数据。 要实现编辑时的数据,你需要做的是将后端返的数据格式化为级联选择器需要的数据结构。el-cascader 组件通常接受一个数组形式的 `options` 作为其选项数据,并且可以通过 `props` 属性定义值(value)、标签(label)和子级(children)字段。 以下是一个基本的数据流程示例: 1. 后端返数据格式可能如下: ```javascript [ { "value": "beijing", "label": "北京", "children": [ { "value": "chaoyang", "label": "朝阳区", "children": [ { "value": "datunlu", "label": "大屯路" } ] } ] } ] ``` 2. 你需要在前端处理这个数据结构,使其适用于el-cascader的`options`属性。 3.处理后的数据赋值给`el-cascader`的`v-model`,即可实现数据的。 ```html <el-cascader v-model="selectedOptions" :options="dataOptions" @change="handleChange"> </el-cascader> ``` ```javascript export default { data() { return { selectedOptions: [], // 用户选中的值 dataOptions: [] // 级联选择器的选项数据 }; }, methods: { // 处理后端返的数据,并赋值给dataOptions handleResponse(response) { // 将返的数据处理为el-cascader需要的格式 this.dataOptions = response; }, handleChange(value) { // 处理选项变更事件 } }, mounted() { // 假设fetchData是一个获取数据的函数 this.handleResponse(fetchData()); } }; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值