el-cascade设置默认值遇到的坑!

Element-UI 在项目中的使用极大的提高了页面的开发效率,但是有些细节可能会让人掉到坑里,当然,今天这个坑不是Element带来的,而是 js 的数据类型不同造成的。


场景:cascade 中的两套选项值来源于不同的接口,

第一套选项:
let options = [
{
value: "495",
label: "家政服务",
children: [
{ value: "96", label: "搬家", children: null },
{ value: "102", label: "生活配送", children: null },
{ value: "497", label: "房屋维修/防水", children: null },
{ value: "498", label: "管道疏通/清洗", children: null },
{ value: "511", label: "家具维修", children: null },
{ value: "1818", label: "开锁/换锁/修锁", children: null }
]
},
{
value: "534",
label: "商务服务",
children: [
{ value: "97", label: "快递", children: null },
{ value: "212", label: "货运物流", children: null },
{ value: "789", label: "货运专线", children: null },
{ value: "1819", label: "建筑维修", children: null }
]
}
];
第二套选项:
let options = [
{
children: [
{ label: "保姆/月嫂", value: 95 },
{ label: "搬家", value: 96 },
{ label: "生活配送", value: 102 },
{ label: "电脑维修", value: 111 },
{ label: "保洁清洗", value: 168 },
{ label: "家电维修", value: 203 },
{ label: "鲜花绿植", value: 484 }
],
label: "家政服务",
value: 495
},
{
children: [
{ label: "快递", value: 97 },
{ label: "工商注册", value: 125 },
{ label: "印刷包装", value: 128 },
{ label: "网站建设/推广", value: 130 },
{ label: "设计策划", value: 199 },
{ label: "货运物流", value: 212 },
{ label: "办公设备维修", value: 309 },
{ label: "财务会计/评估", value: 504 },
{ label: "商标专利", value: 505 },
{ label: "礼品定制", value: 1979 }
],
label: "商务服务",
value: 534
}
];
这两个结果有相同的数据格式,所以传给el-cascade的options都能显示正常
<el-cascader expand-trigger="hover"
                 filterable
                 size="small"
                 :options="industryOptions"
                 v-model="industry"
                 @change="onChange">
</el-cascader>

发现问题

但是当需要设置默认值的时候就发现问题:
data() {
    return {
      industry: [495, 96],
      industryOptions: options
    };
  },

当使用第二套选项时,默认值会显示 家政服务/搬家 这是没问题的。但是当选用了第一套方案时,默认值却死活出不来。

最终查明原因,是因为在第一套中 value 值是字符串,而第二套的 value 值是数字。


处理方案:统一 value 的值类型

/**
* 递归将选项中的 value 值及其 children 里面的 value 都转换成数字类型
*
* @param {Array} options 选项,格式为: [{ value: 0, label: "", children: [{ value: 2, label: "" }] }]
*/
function parseValueToInt(options) {
    options.forEach(opt => {
        opt.value = parseInt(opt.value);
        if (opt.children && opt.children.length > 0) {
            parseValueToInt(opt.children);
        }
    });
}

需要从外部传入默认值的时候,也可以做一下适配:

this.industry = val.map(d => d && parseInt(d));



这是前端填坑之旅的第一站,养成遇到坑就记录下来是一个好习惯,一方面加深自己的印象避免再次掉进同一个坑,另一方面也能帮助更多掉到坑里的人找到解决方案(说不定那个掉到坑里的人还是自己……)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
el-cascadeElement UI框架中的一个组件,用于实现级联选择器。懒加载回显是指在级联选择器中,当某个级联选项被选择时,根据选择的动态加载下一级的选项,并将已选择的回显到级联选择器中。 在el-cascade中实现懒加载回显的步骤如下: 1. 定义级联选择器的数据源,包括每个级联选项的和对应的子选项。 2. 使用v-model指令绑定级联选择器的。 3. 监听级联选择器的change事件,在事件处理函数中获取当前选择的。 4. 根据当前选择的,动态加载下一级的选项数据。 5. 将已选择的回显到级联选择器中。 具体实现方式可以参考以下代码示例: ```html <template> <el-cascader v-model="selectedOptions" :options="options" @change="handleCascadeChange" ></el-cascader> </template> <script> export default { data() { return { selectedOptions: [], // 已选择的 options: [ // 级联选择器的数据源 { value: 'option1', label: 'Option 1', children: [ { value: 'option1-1', label: 'Option 1-1', children: [ { value: 'option1-1-1', label: 'Option 1-1-1', }, { value: 'option1-1-2', label: 'Option 1-1-2', }, ], }, { value: 'option1-2', label: 'Option 1-2', }, ], }, { value: 'option2', label: 'Option 2', }, ], }; }, methods: { handleCascadeChange(value) { // 根据选择的动态加载下一级的选项数据 // 这里可以根据实际需求进行异步请求获取数据 // 并更新options中对应级联选项的children属性 }, }, }; </script> ``` 在上述代码中,`options`数组定义了级联选择器的数据源,`selectedOptions`用于绑定已选择的。在`handleCascadeChange`方法中,可以根据选择的动态加载下一级的选项数据,并更新`options`中对应级联选项的`children`属性。这样就实现了el-cascade的懒加载回显功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值