今天在开发时遇到了一个问题,在往一个表单中的级联选择器--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中的一致。
个人见解,欢迎指正。