引自免费微信小程序:皆我百晓生
根据您提供的代码和描述,看起来您在使用Element UI的el-cascader组件时遇到了一些问题。在尝试回显多选状态时,所有父级节点被取消选择。这可能是因为el-cascader的默认行为是在进行多选时,如果选择了某个子项,则会自动选中其父级节点。而当您从服务器获取数据并试图回显多选状态时,由于选择了多个子项,导致了父级节点的选中状态被重置。
要解决这个问题,您可以尝试将回显数据的操作调整到watch监听器中,并且对已选中的子节点进行处理,确保它们的父级节点也被选中。以下是修改后的代码示例:
首先,在您的Vue组件中添加一个watch监听器来观察defaultCheckedKeys的变化:
然后在getAll()和fetchData()方法中,只更新defaultCheckedKeys,不直接操作selectedList:
methods: {
...
getAll() {
...
},
fetchData() {
...
this.defaultCheckedKeys = res.filter(item => item.checked === true).map(item => item.id);
this.test();
},
...
}
现在,当回显数据时,rebuildSelectedList方法会被调用,它会遍历defaultCheckedKeys中的每个值,找到对应的节点,并递归地将父级节点也加入到selectedList中。这样就可以实现多选子节点的同时保持父级节点的选中状态。
请注意,这个解决方案依赖于findNodeByKey和addParentNodes这两个辅助函数,它们用于查找给定ID的节点以及向上遍历并收集父级节点。这些函数假定list数据结构是一个具有id, parent(指向其父节点),children(子节点列表)属性的树形结构。如果实际的数据结构不同,请相应地调整这两个函数。
