-
Notifications
You must be signed in to change notification settings - Fork 198
Open
Description
问题描述
cascader 数据没有回显成功 原因是组件内部 setDefaultValue 没有更改 levelList 。正确代码贴在下面
复现步骤
<up-cascader v-model:show="visible" v-model="value" :data="categoryData"></up-cascader>
const value = ref(['2', '2-2', '2-2-2']);
const categoryData = ref([
{
label: '服装',
value: '1',
children: [
{
label: '上装',
value: '1-1',
children: [
{ label: 'T恤', value: '1-1-1' },
{ label: '衬衫', value: '1-1-2' },
],
},
],
},
{
label: '数码',
value: '2',
children: [
{
label: '电脑',
value: '2-2',
children: [
{ label: '笔记本', value: '2-2-1' },
{ label: '台式机', value: '2-2-2' },
],
},
],
},
]);
预期行为
初始数据未回显
截图
版本(请填写以下信息):
"uview-plus": "^3.6.29",
其他上下文
我的解决代码如下:
setDefaultValue() {
// 根据默认值设置选中项
this.selectedValueIndexs = [];
this.levelList = [this.data]; // 重置为第一级数据
let currentLevelData = this.data;
let hasNextLevel = false;
for (let i = 0; i < this.modelValue.length; i++) {
const value = this.modelValue[i];
const index = currentLevelData.findIndex(item => item[this.valueKey] === value);
if (index !== -1) {
this.selectedValueIndexs.push(index);
// 获取当前选中项
const currentItem = currentLevelData[index];
// 如果有子级数据,则添加到levelList中
if (currentItem[this.childrenKey] && currentItem[this.childrenKey].length > 0) {
currentLevelData = currentItem[this.childrenKey];
// 将下一级数据添加到levelList
this.levelList.push(currentLevelData);
hasNextLevel = true;
} else {
hasNextLevel = false;
break;
}
} else {
// 如果找不到匹配项,则停止处理
break;
}
}
// 设置tabsIndex,如果有选中值则定位到最后一级
if (this.selectedValueIndexs.length > 0) {
this.tabsIndex = Math.max(0, this.selectedValueIndexs.length - (hasNextLevel ? 0 : 1));
}
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels