el-cascader地区动态加载根据后台的ID回显
时间: 2023-07-27 19:19:10 浏览: 79
您好!针对您的问题,我理解您是想在 el-cascader 中根据后台返回的地区 ID 进行动态加载,并且在回显数据时能够正确展示。这里提供一个简单的思路,供您参考:
1. 在 el-cascader 中设置 lazy 属性为 true,这样子组件将会以懒加载的方式进行数据加载;
2. 在回显数据时,将对应的地区 ID 存储在一个数组中,例如 selectedRegionIds;
3. 在 el-cascader 中设置 value 属性为 selectedRegionIds,这样子组件将会自动根据 value 属性的值进行选项的展开和选中。同时,通过 watch 监听 selectedRegionIds 的变化,当值发生变化时自动加载对应的地区数据。
关于具体的代码实现,可以参考下面的示例:
```
<template>
<el-cascader
:options="options"
:lazy="true"
:value="selectedRegionIds"
@change="handleChange"
></el-cascader>
</template>
<script>
export default {
data() {
return {
options: [], // 级联选项数据
selectedRegionIds: [], // 回显数据
};
},
created() {
// 获取根级地区数据
this.fetchRegionsByParentId(0).then((options) => {
this.options = options;
});
// 获取回显数据
this.fetchSelectedRegionIds().then((selectedRegionIds) => {
this.selectedRegionIds = selectedRegionIds;
});
},
watch: {
selectedRegionIds: {
handler(value) {
// 加载对应的地区数据
this.loadRegionsByRegionIds(value);
},
immediate: true,
},
},
methods: {
// 异步请求获取指定 parent_id 下的地区数据
fetchRegionsByParentId(parentId) {
// ...
},
// 异步请求获取回显数据
fetchSelectedRegionIds() {
// ...
},
// 根据地区 ID 加载对应的地区数据
loadRegionsByRegionIds(regionIds) {
let parentId = 0;
let i = 0;
const loadRegion = () => {
if (i < regionIds.length) {
this.fetchRegionsByParentId(parentId).then((regions) => {
const region = regions.find((r) => r.region_id === regionIds[i]);
if (region) {
parentId = region.region_id;
i++;
loadRegion();
}
});
}
};
loadRegion();
},
// 当选中项发生变化时触发
handleChange(value) {
this.selectedRegionIds = value;
},
},
};
</script>
```
需要注意的是,以上代码仅提供一个思路,具体实现还需要根据您的具体需求进行调整。希望能够对您有所帮助!
阅读全文