vue使用elementPlus实现基础级联选择
方案一:动态绑定选项(推荐)
完整代码如下:
1 | <template> |
关键实现说明
-
默认选中第一项:
- 在
onMounted
生命周期钩子中设置默认值 - 疏散点类型默认选中第一个选项
- 自动触发
handleDisperePointTypeChange
设置对应的建筑类型第一项
- 在
-
动态选项更新:
- 使用
buildingTypeData
对象存储不同疏散点类型对应的建筑类型 - 当疏散点类型变化时,更新
buildingTypeOptions
数组使用v-if
控制第二级选择框的显示
- 使用
-
显示控制:
- 使用
v-if="showPlaceSelect"
控制建筑类型选择框的显示 - 只有选择了有效的疏散点类型时才显示建筑类型选择
- 使用
-
数据重置:
- 当疏散点类型变化时,自动重置建筑类型选择
- 确保选项和值的同步更新
方案二:条件渲染(适合选项结构差异大的场景)
1 | <template> |
关键实现要点
-
数据结构设计
1
2
3
4
5// 使用对象存储层级关系
const allPlaces = {
类型1: [选项1, 选项2],
类型2: [选项3, 选项4]
} -
动态计算属性
1
2
3const filteredPlaces = computed(() => {
return currentType.value ? allPlaces[currentType.value] : []
}) -
重置二级选择(当一级变化时)
1
2
3watch(evacuationType, (newVal) => {
specificPlace.value = '' // 清空之前的选择
})
效果增强建议
-
添加禁用状态
1
2
3
4<el-select
:disabled="!evacuationType"
placeholder="请先选择类型"
> -
添加分组显示
1
2
3
4
5
6
7
8
9
10
11
12<el-option-group
v-for="group in filteredGroups"
:key="group.label"
:label="group.label"
>
<el-option
v-for="item in group.options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-option-group>
完整数据参考
1 | const allPlaces = { |
评论