当前位置: 首页 > article >正文

uniapp组件实现省市区三级联动选择

1.导入插件

先将uni-data-picker组件导入我们的HBuilder项目中,在DCloud插件市场搜索uni-data-picker

点击下载插件并导入到我们的项目中

2.组件调用

curLocation :获取到的当前位置(省市区)

<uni-data-picker v-slot:default="{data, error, options}" :localdata="localData" popup-title="请选择省市区" @change="onchange" @nodeclick="onnodeclick">
						<view class="selectedAddress">
							<view v-if="data.length == 0 && curLocation">{{ curLocation }}</view>
							<view v-if="data.length" class="selected">
								<view v-for="(item,index) in data" :key="index" class="selected-item">
								<text>{{item.text}} </text> 
								</view>
							</view>
							<view class="addrlocation">
								<uni-icons type="location" color="#ec4149" size="24"></uni-icons>
							</view>
						</view>
					</uni-data-picker>
data(){
    return {
        localData:[], //省市区地址
		curLocation: uni.getStorageSync('location_address'),
    }
}

3.处理我们需要的省市区数据

1)在https://gitee.com/dcloud/opendb下载省市区源数据,collection/opendb-city-china

2)下载后的数据是一组一维对象数组,接下来把这个数组处理成树形结构

在页面中引入:

const cityRows = require('@/common/opendb-master/collection/opendb-city-china/data.json')
// 省市区数据树生成
			get_city_tree () {
				let res = []
				if (cityRows.length) {
					// 递归生成
					res = this.handleTree(cityRows)
				}
				return res
			},


handleTree (data, parent_code = null) {
				let res = []
				
				let keys = {
					id: 'code',
					pid: 'parent_code',
					children: 'children',
					
					text: 'name',
					value: 'code'
				}
				
				let oneItemDEMO = {
					text: '',
					value: '',
					children: []
				}
				let oneItem = {}
				
				// 循环
				for (let index in data) {
					// 判断
					if (parent_code === null) {
						// 顶级菜单 - 省
						if (!data[index].hasOwnProperty( keys.pid ) || data[index][keys.pid] == parent_code) {
							// 不存在parent_code,或者已匹配
							oneItem = JSON.parse(JSON.stringify(oneItemDEMO))
							oneItem.text = data[index][keys.text]
							oneItem.value = data[index][keys.value]
							
							// 递归下去
							oneItem.children = this.handleTree(data, data[index][keys.id])
							res.push(oneItem)
						} 
					} else {
						// 非顶级菜单 - 市、区、街道
						if (data[index].hasOwnProperty( keys.pid ) && data[index][keys.pid] == parent_code) {
							// 已匹配
							oneItem = JSON.parse(JSON.stringify(oneItemDEMO))
							oneItem.text = data[index][keys.text]
							oneItem.value = data[index][keys.value]
							
							// 递归下去
							oneItem.children = this.handleTree(data, data[index][keys.id])
							res.push(oneItem)
							
						}
					}
				}
				return res
			},
onLoad(options){
    this.localData = this.get_city_tree()
}

最后的效果:


http://www.kler.cn/a/383698.html

相关文章:

  • 【AI视频换脸整合包及教程】AI换脸新星:Rope——让换脸变得如此简单
  • yolov8-seg目标分割理论及代码运行实践
  • 选择适合你的报表工具,山海鲸报表与Tableau深度对比
  • k8s图形化显示(KRM)
  • 数据结构与算法分析:专题内容——动态规划1之理论讲解(代码详解+万字长文+算法导论+力扣题)
  • SQL进阶技巧:如何计算复合增长率?
  • 【Unity基础】粒子系统与VFX Graph的区别
  • 【LeetCode】【算法】226. 翻转二叉树
  • echarts图表的使用(常用属性)
  • 数据特征工程:如何计算Teager能量算子(TEO)? | 基于SQL实现
  • 使用LoRA 对千问70B模型进行微调
  • Jupyter Notebook添加kernel的解决方案
  • 汇聚全球前沿科技产品,北京智能科技产业展览会·世亚智博会
  • 人工智能驱动金融市场:民锋智能分析引领精准投资
  • Java:多态的调用
  • 使用 Spring Security 和 JWT 实现安全认证机制
  • MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解
  • PostgreSQL (八) 创建分区
  • 如何选择适合CMS运行的服务器?
  • MySQL 8.0在windows环境安装及配置
  • STM32项目---水质水位检测
  • nuPlan最新SOTA,香港科技大学发布基于学习决策范围内的规划PlanScope
  • Java 网络编程(一)—— UDP数据报套接字编程
  • mysql数据同步到sql server
  • SpringBoot在线教育系统:云部署策略
  • 4.3 Linux的中断处理流程