el-cascader多选/单选数据不回显

网上搜到的方法都是v-modelvalue替换
但是不适用于我的项目上,在一点一点排查之后发现是切换单双选导致的数据不回显

<el-cascader
   ref="cascaderRef"
   v-model="form.modelList"
   :options="options"
   clearable
   filterable
   placeholder="请选择"
   :props="{
     label: 'objectName',
     value: 'objectId',
     multiple: isMultiple,
   }"
   @change="handleChangeModelId"></el-cascader>

就是multiple: isMultiple这一行导致,所以就直接写两个组件用v-show去切换组件

<!-- 单选多选切换会导致回显不上数据,所以v-show切换组件 -->
 <el-cascader
  v-show="!form.type"
   ref="cascaderRef"
   v-model="form.modelList"
   :options="options"
   clearable
   filterable
   placeholder="请选择应用对象"
   :props="{
     multiple: true,
   }"
   @change="handleChangeModelId"></el-cascader>
 <el-cascader
   v-show="!!form.type"
   ref="cascaderRef"
   v-model="form.modelList"
   :options="options"
   clearable
   filterable
   placeholder="请选择应用对象"
   @change="handleChangeModelId"></el-cascader>
### Element Plus `el-cascader` 组件实现懒加载与回显 #### 懒加载功能配置 为了使 `el-cascader` 支持懒加载,需设置属性 `options` 为空数组,并通过异步请求获取子节点数据。当用户展开某个节点时触发回调函数来加载该节点下的项。 ```javascript const loadOptions = async (node, resolve) => { const { value } = node; let result; try { // 假设这里调用了后端API并返回了响应结果 result = await fetchChildNodes(value); // 将获取到的数据传递给resolve方法完成渲染 resolve(result.map(item => ({ value: item.id, label: item.name, leaf: !item.hasChildren }))); } catch(error){ console.error('Failed to load options:', error); resolve([]); } }; ``` 此部分逻辑应放在组件内部定义的方法里[^1]。 #### 模式下保存已择项 对于支持的情况(`multiple=true`),可以通过监听输入框变化事件更新本地状态变量存储当前所值: ```html <template> <!-- ... --> <el-cascader v-model="selectedValues" multiple :props="{ lazyLoad: true, checkStrictly: false}" @change="handleChange"> </el-cascader> </template> <script setup lang="ts"> import { ref } from 'vue'; let selectedValues = ref([]); function handleChange(values){ // 更新selectedValues的状态 } </script> ``` 此处需要注意的是,在场景中,如果希望父级节点被勾自动全其所有子节点,则可以将 `checkStrictly` 设置为 `true`[^2]。 #### 编辑状态下恢复初始择 为了让编辑页面能够正确展示之前已经做出的择,可以在初始化阶段根据已有记录填充 `v-model` 对应的绑定字段。假设服务器端提供了完整的路径信息作为参数传入前端应用: ```typescript // 获取详情接口成功后的处理逻辑 async function getDetail(id:string):Promise<void>{ const res=await api.get(`/api/detail/${id}`); // 如果是单选则直接赋值;如果是则遍历每一条记录分别push进去 form.value.cascadeValue=res.data.singleSelect ? [res.data.path.split(',')] : res.data.multiPaths.map(path=>path.split(',')); // 渲染视图... } onMounted(() => { if(route.params.id){ // 判断是否存在ID表示处于编辑态 getDetail(String(route.params.id)); } }); ``` 上述代码片段展示了如何基于同情况(单选),利用逗号分隔字符串形式的路径构建起始值列表[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值