Skip to content

cascader 数据没有回显 #972

@xiangjiayu

Description

@xiangjiayu

问题描述
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' },
        ],
      },
    ],
  },
]);

预期行为
初始数据未回显

截图

Image

版本(请填写以下信息)
"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));
      }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions