关于 element-ui el-cascader 数据回显问题的解决方案

通常情况下,我们在使用 el-cascader控件,往数据库保存的都是最后一级的数据,那如果再次编辑此条数据时,直接给el-cascader 传入最后一级的数据,它是不会自动勾选的。

简略的数据结构

[{
    value: 'zhinan',
    label: '指南',
    children: [{
        value: 'shejiyuanze',
        label: '设计原则',
        children: [{
          value: 'yizhi',
          label: '一致'
        }, {
          value: 'fankui',
          label: '反馈'
        }]
    }]
}]    

如下图,如果我直接给el-cascader赋值为['fankui'],它是不会直接勾选上的,因为el-cascader需要的格式不是这样的

在这里插入图片描述

要想知道el-cascader需要的格式是什么样的,可以给el-cascader绑定一个chang事件,勾选【指南/设计原则/一致】,打印一下

<!-- multiple 控制是否多选 -->
<el-cascader 其他的属性省略 v-model="value" :props="{ multiple: true}" @change="handCascaderChange"></el-cascader>
handCascaderChange(val){
  console.log(val) 
  // 单选(multiple=false) 时, val = ["zhinan","shejiyuanze","yizhi"]
  // 多选(multiple=true) 时, val = [["zhinan","shejiyuanze","yizhi"]]
},

由此我们可以的得出结论:el-cascader需要的参数是整条路径,[第一级,第二级,第三级,***]

如此,我们需要一个工具函数,根据value找出整条路径,然后再给控件赋值,这样组件就可以将相关数据勾选上了

function search(object, value) {
    for (var key in object) {
        if (object[key].value == value) return [object[key].value];
        if(object[key].children && Object.keys(object[key].children).length > 0){
            var temp = search(object[key].children, value);
            if (temp) return [object[key].value, temp].flat();
        }
    }
}
let options = [{
    value: 'zhinan',
    label: '指南',
    children: [{
        value: 'shejiyuanze',
        label: '设计原则',
        children: [{
          value: 'yizhi',
          label: '一致'
        }, {
          value: 'fankui',
          label: '反馈'
        }]
    }]
}]
let val = search(options,'yizhi') // ["zhinan","shejiyuanze","yizhi"]
// 单选和多选赋值有一点不同
if(multiple){
    this.value = [val]  // this.value:el-cascader v-model 绑定的变量
}else {
    this.value = val
}

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值