uniapp 如何实现省市区选择功能
在uniapp中如何实现省市区三级联动选择功能?希望找一个简单高效的解决方案,最好能支持数据动态加载和回显功能。目前尝试过picker组件但只能实现单列选择,请问有没有现成的插件或者更好的实现方式?数据源是用本地JSON还是需要调用接口获取?
2 回复
使用uni-app实现省市区选择,推荐以下方法:
- 使用uni-data-picker组件(官方推荐)
<uni-data-picker placeholder="请选择省市区" />
- 使用第三方插件
- uView的u-picker组件
- 安装城市选择插件
- 自定义picker组件 结合picker-view实现三级联动
建议使用uni-data-picker,内置数据源,开箱即用。
在 UniApp 中实现省市区选择功能,可以通过以下方法实现:
1. 使用官方 picker 组件(适用于简单场景)
- 使用多列选择器
<picker mode="multiSelector">,但需要手动处理数据联动。 - 示例代码:
<template>
<view>
<picker mode="multiSelector" :range="regionData" @change="onRegionChange">
<view>选择省市区:{{selectedRegion.join('-')}}</view>
</picker>
</view>
</template>
<script>
export default {
data() {
return {
regionData: [
['北京', '上海', '广东'],
['北京市区', '上海城区', '广州市', '深圳市'],
['东城区', '西城区', '朝阳区', '浦东新区', '天河区']
],
selectedRegion: []
}
},
methods: {
onRegionChange(e) {
this.selectedRegion = [
this.regionData[0][e.detail.value[0]],
this.regionData[1][e.detail.value[1]],
this.regionData[2][e.detail.value[2]]
]
}
}
}
</script>
2. 使用第三方组件(推荐)
- 安装
uni-area组件:
npm install @vant/area-data
- 使用示例:
<template>
<view>
<van-area :area-list="areaList" @confirm="onConfirm" />
</view>
</template>
<script>
import { areaList } from '@vant/area-data';
export default {
data() {
return {
areaList: areaList,
selectedArea: ''
}
},
methods: {
onConfirm(event) {
this.selectedArea = event.detail.values.map(item => item.name).join('')
}
}
}
</script>
3. 自定义组件+本地数据
- 使用中国行政区划数据 JSON 文件
- 实现三级联动选择器
- 数据来源:阿里云行政区划数据
注意事项:
- 数据量较大时建议使用懒加载
- 可结合 uni-app 的 picker-view 组件实现更灵活的界面
- 考虑数据更新维护,建议使用最新行政区划数据
推荐使用第二种方式(vant area组件),数据完整且维护方便。

