el-cascader--赋值后,下拉框中有勾选但是输入框中没有回显的bug

开发者在使用ElementUI的el-cascader组件时遇到回显问题,发现value类型与options中类型不一致导致。通过检查并确保类型匹配,修复了这个问题。后端也需要相应地调整存储逻辑以适应前端数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在开发时遇到了一个问题,在往一个表单中的级联选择器--el-cascader中赋值时,出现了奇怪的bug,下拉框中已经勾选,但是输入框中没有回显:

页面并没有报错,且再次编辑后,回显就正常了,然后刷新页面会又会出现。

好在找到系统的另一个页面中之前也有用过el-cascader,经过仔细的对比后发现了问题所在。 

级联选择器的options是用来配置选择器的下拉数据,props用来配置选项:

 <el-cascader
    v-model="value"
    :options="options"
    :props={
        value:'id',
        label:'label',
        children:'children',
        checkStrictly:true, //是否严格的遵守父子节点不互相关联
    }
    @change="handleChange">
</el-cascader>

 在el-cascader的文档中,对于绑定的value值的类型并没有限制。但是需保持绑定值、回显值和options里的值类型相同。

然后我发现勾选后,value的值类型会和options中的类型相同,都是Number,然后提交到后端后,再次查询页面的回显值变成了String。导致了回显后双向绑定的value值类型和options里的不同,从而导致无法回显。

最后让后端修改了存储的逻辑,存储和前端提交的字段相同的类型,问题就解决了。

在发现el-cascader的回显出现问题时,可以注意下回显的值类型是否和options中的一致。

个人见解,欢迎指正。

### Element UI `el-cascader` 组件赋值回显解决方案 对于 `el-cascader` 组件,在某些情况下,当尝试通过 `v-model` 或者其他方式设置其值时,可能会遇到无法正确显示已选中的选项的问题。这通常是因为数据绑定的方式正确或者是组件的状态未被及时更新。 为了确保 `el-cascader` 正确地反映所赋予的值并且回显出来,可以采取如下措施: #### 数据结构匹配 确认所提供的路径数组与级联选择器的数据源相匹配是非常重要的。如果数据源是一个对象数组,则每一个子项应该有一个唯一的标识符作为键名,并且这个键名应当对应于配置属性内的 `value` 字段[^1]。 ```javascript // 假设这是你的数据源 const options = [{ value: 'zhinan', label: '指南', children: [...] }]; ``` #### 使用 `watch` 监听变化 有时直接修改 v-model 的值可能会触发视图更新。此时可以在 Vue 实例内部定义一个 watcher 来监听目标变量的变化,并手动调用 `$refs.cascader.dropDownVisible = true;` 强制刷新下拉框状态[^2]。 ```javascript data() { return { selectedValue: [] } }, watch: { selectedValue(newValue, oldValue) { this.$nextTick(() => { if (this.$refs && this.$refs.cascader) { this.$refs.cascader.dropDownVisible = false; this.$refs.cascader.handleExpandChange(); } }); } } ``` #### 初始化加载完成后赋值 在页面初次渲染完成之后再给 `el-cascader` 设置默认值也是一个有效的办法。可以通过钩子函数如 mounted 阶段来进行操作[^3]。 ```javascript mounted() { setTimeout(() => { // 模拟异步获取初始值的过程 const initialValue = ['beijing', 'dongcheng']; this.selectedValue = initialValue; }, 0); } ``` 上述方法可以帮助解决 `el-cascader` 赋值能正常回显的问题。需要注意的是具体实现细节会依据实际应用场景有所同,因此建议根据项目具体情况调整以上给出的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值