微信小程序实现省市区级联选择组件

微信小程序实现省市区级联选择组件

  1. 首先,创建一个新的组件,命名为 area-picker

  2. area-picker.wxml 文件中添加以下代码:

<view class="area-picker"><picker mode="multiSelector" bindchange="onPickerChange" bindcolumnchange="onColumnChange" value="{{pickerIndex}}" range="{{pickerData}}"><view class="picker-view">{{selectedArea || '请选择省市区'}}</view></picker>
</view>
  1. area-picker.ts 文件中添加以下代码:
import { areaData } from './area-data';interface AreaItem {code: string;name: string;
}Component({properties: {// 可以添加自定义属性},data: {pickerData: [[], [], []] as string[][],pickerIndex: [0, 0, 0],selectedArea: '',provinces: [] as AreaItem[],cities: [] as AreaItem[],districts: [] as AreaItem[],},lifetimes: {attached() {this.initAreaData();},},methods: {initAreaData() {const provinces = areaData.map(province => ({code: province.code,name: province.name,}));this.setData({provinces,pickerData: [provinces.map(p => p.name),[],[],],});this.updateCities(0);this.updateDistricts(0);},updateCities(provinceIndex: number) {const cities = areaData[provinceIndex].children.map(city => ({code: city.code,name: city.name,}));this.setData({cities,'pickerData[1]': cities.map(c => c.name),});},updateDistricts(cityIndex: number) {const { pickerIndex } = this.data;const districts = areaData[pickerIndex[0]].children[cityIndex].children.map(district => ({code: district.code,name: district.name,}));this.setData({districts,'pickerData[2]': districts.map(d => d.name),});},onColumnChange(e: WechatMiniprogram.PickerColumnChange) {const { column, value } = e.detail;const { pickerIndex } = this.data;pickerIndex[column] = value;if (column === 0) {this.updateCities(value);this.updateDistricts(0);pickerIndex[1] = 0;pickerIndex[2] = 0;} else if (column === 1) {this.updateDistricts(value);pickerIndex[2] = 0;}this.setData({ pickerIndex });},onPickerChange(e: WechatMiniprogram.PickerChange) {const { value } = e.detail;const { provinces, cities, districts } = this.data;const selectedArea = `${provinces[value[0]].name} ${cities[value[1]].name} ${districts[value[2]].name}`;this.setData({ selectedArea });this.triggerEvent('areachange', {province: provinces[value[0]],city: cities[value[1]],district: districts[value[2]],});},},
});
  1. 创建 area-data.ts 文件,包含省市区数据:
export const areaData = [{code: '110000',name: '北京市',children: [{code: '110100',name: '北京市',children: [{ code: '110101', name: '东城区' },{ code: '110102', name: '西城区' },// ... 其他区],},],},// ... 其他省份
];
  1. area-picker.wxss 文件中添加一些基本样式:
.area-picker {padding: 10px;
}.picker-view {border: 1px solid #ccc;padding: 10px;border-radius: 4px;
}
  1. 在页面中使用该组件:
<area-picker bind:areachange="onAreaChange" />

在对应的页面 .ts 文件中添加 onAreaChange 方法:

Page({onAreaChange(e: any) {const { province, city, district } = e.detail;console.log('Selected area:', province, city, district);},
});

这个组件实现了以下功能:

  1. 三级联动的省市区选择
  2. 选择后显示完整的地址文本
  3. 选择完成后触发 areachange 事件,返回选中的省市区对象

关注微信公众号温暖前端,不定期分享前端知识点和前端资料↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析&#xff08;Overload Resolution&#xff09;--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…

PlantUML 教程:绘制时序图

绘制时序图是 PlantUML 的一个强大功能&#xff0c;下面是详细的 PlantUML 时序图教程&#xff0c;帮助你理解如何使用它来创建清晰的时序图。 基本概念 时序图&#xff08;Sequence Diagram&#xff09;用于展示对象之间的交互以及它们之间的消息传递顺序。它主要由以下元素…

感应灯光画纯电路开源版本

前言 之前那版灯光画用的从垃圾佬淘的电路板拼出来的&#xff0c;功能不全&#xff0c;显示效果不太好而且无法固定到相框上&#xff0c;这次改版用的嘉立创smt&#xff0c;贴了5片板子&#xff08;19元&#xff09;&#xff0c;功能上的改进是加了无极触摸调光、添加了黄白两…

简易图书管理系统——MYsql+Javase+JDBC

目录 前言 数据表的建立 操作包各个类的实现 增加类 删除类 展示类 借阅与归还类 前言 书接上文 JDBC编程的学习——MYsql版本-CSDN博客 本期我们通过对先前图书管理系统进行改造,是它的数据能保存在数据库中 完整代码我已经保存在github中,能不能给个星呢!!!! call…

debian固定ip

debian固定ip 前言 安装好的Debian系统后&#xff0c;为了确保每次登陆的ip不变&#xff0c;需要固定 方法 命令如下 ip addr | grep inet因为有有线网和无线网 2 种连接方式&#xff0c;因此需要区别。 其中 enp 的是有线&#xff0c;wlp 的是无线 查看网关 IP 命令如下 …

互联网末法时代的一些思考

这篇文章也是临时起意&#xff0c;很长一段时间没写个人思考类的文章&#xff0c;主要原因也是时间完全不够用。随着年龄的增长&#xff0c;看待问题的视角也逐渐发生变化&#xff0c;例如从关注现象到关注动机&#xff0c;从关注结果到关注起因&#xff0c;2021年的时代我曾经…

java面向对象进阶篇--static

一、前言 java进阶篇已经开始了&#xff0c;先从面向对象开始&#xff0c;由于时间原因今天就只更新了static部分&#xff0c;内容上特别详细&#xff0c;一些特别的注意事项也在反复的提醒大家。 温馨提示一下&#xff0c;往后的java篇会越来越难&#xff0c;希望大家能够坚…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

运维检查:mysql表自增id是否快要用完

数据库表中最大自增ID用完会报错。判断是否接近或达到自增ID类型的最大值&#xff1a;‌ 对于MySQL中的自增ID&#xff0c;‌如果使用的是int类型&#xff0c;‌其无符号&#xff08;‌unsigned&#xff09;‌的最大值可以达到2^32 - 1&#xff0c;‌即4294967295。‌如果使用的…

python编程:从入门到实践(第三版) 笔记

文章目录 资源网站:https://www.ituring.com.cn/book/3038配置VSCode推荐资源网站推荐资源网址 资源网站:https://www.ituring.com.cn/book/3038 配置VSCode 推荐资源网站 推荐资源网址 英文版主页&#xff1a; https://ehmatthes.github.io/pcc_3e 中文版主页&#xff1a; h…

上市公司企业共同机构所有权数据、机构交叉持股数据(2005-2023)

数据来源&#xff1a;基础数据来源于上市公司企业年报 时间跨度&#xff1a;2005-2023年 数据范围&#xff1a;企业层面 数据指标&#xff1a; 参考《中国工业经济》杜勇&#xff08;2021&#xff09;老师的做法&#xff0c;从 3 个维度构造指标反映上市公司共同机构所有权&…

Vue和Element UI 路由跳转

在Vue.js中&#xff0c;使用Vue Router可以方便地实现页面之间的路由跳转。Element UI是一个基于Vue 2.0的桌面端组件库&#xff0c;它本身并不直接提供路由跳转的功能&#xff0c;但你可以在使用Element UI的Vue项目中结合Vue Router来实现这一功能。 以下是一个基于Vue和Ele…

Proxyman for Mac v5.6.1 抓包调试工具

Mac分享吧 文章目录 效果一、下载软件二、功能三、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 四、运行测试1、打开软件 安装完成&#xff01;&#xff01;&#xff01; 效果 一…

【华为OD笔试】2024D卷命题规律解读【分析300+场OD笔试考点总结】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读华为OD笔试2024D卷命题规律解读华为OD算法/大厂面试高频题算法练习冲刺训练 相关推荐阅读 【华为OD笔试】2024D卷机考套题…

C# Opencv实现本地以图搜图

地址&#xff1a;冯腾飞/本地以图搜图

Java面试八股之Redis哨兵机制

Redis哨兵机制 Redis Sentinel&#xff08;哨兵&#xff09;模式是一种高可用解决方案&#xff0c;用于监控和自动故障转移Redis主从集群。以下是对哨兵模式详细过程的描述&#xff1a; 1. 初始化与配置 部署哨兵节点&#xff1a;在不同的服务器上部署一个或多个Redis Sentin…

《算法笔记》总结No.7——二分(多例题详解版)

一.二分查找 目前有一个有序数列&#xff0c;举个例子&#xff0c;假设是1~1000&#xff0c;让我们去查找931这个数字&#xff0c;浅显且暴力的做法就是直接从头到尾遍历一遍&#xff0c;直到找到931为止。当n非常大&#xff0c;比如达到100w时&#xff0c;这是一个非常大的量级…

Linux 线程初步解析

1.线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列。在linux中&#xff0c;由于线程和进程都具有id,都需要调度等等相似性&#xff0c;因此都可以用PCB来描述和控制,线程含有PCB&am…

美联储降息应该更早?高盛:有充分理由7月降息,而非9月

KlipC报道&#xff1a;高盛首席经济学家哈祖斯Jan Hatzius表示&#xff0c;美联储“有充分理由”在7月会议上降息&#xff0c;而非等到9月。 在最新发布的报告中&#xff0c;他表明通胀已经取得了足够的进展&#xff0c;回到了美联储2%的长期目标附近&#xff0c;这将使美联储…

[C++ 入门基础 - 命名空间]

在C中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一种用来组织代码并避免命名冲突的机制。命名空间可以包含变量、函数、类等C中的所有实体&#xff0c;使得这些实体的名称在命名空间内部有效&#xff0c;避免了与其他命名空间或全局作用域中相同名称的冲突。 文…