小程序-基于vant的Picker组件实现省市区选择

news2024/9/25 23:22:27

一、原因

因@vant/area-data部分的市/区数据跟后台使用的高德/腾讯省市区有所出入,故须保持跟后台用同一份数据,所以考虑以下几个组件

1、Area
2、Cascader
3、Picker

因为使用的是高德地图的省市区json文件,用area的话修改结构代价太大,费时费力。接着尝试使用Cascader组件,但这个组件每列数据过多时会滑动、点击卡顿等等,故也排除,只剩最后的picker了

Cascader卡顿:

 二、使用

刚开始看文档这个结构一时没有理解,有点懵,后面经过研究发现需要如下结构

高德gaode-area.json为例,点击就可以下载高德省市区数据(包含压缩和未压缩的)

因为想减少小程序的体积,故把文件丢到服务器上了

2.1、页面代码

 <van-field name="area" model:value="{{ area }}" label="地区选择" placeholder="请选择地区" clearable readonly is-link data-popups="showArea" bind:click-input="show_popup" />

<!-- 省市区 -->
<van-popup show="{{ showArea }}" position="bottom" round data-popups="showArea" bind:close="hide_popup">
    <van-picker columns="{{ addrs }}" show-toolbar title="地区选择" value-key="name" bind:change="onAreaChange" data-popups="showArea" bind:confirm="onAreaConfirm" bind:cancel="hide_popup" />
</van-popup>

2.2、js代码

// 主要js

getAreas() {
        let that = this
        wx.request({
            url: `${app.globalData.urls}/gaode-area.json`,
            header: {},
            success(res) {
                let result = res.data.districts[0].districts
                let arrs = [{
                    values: result
                }, {
                    values: result[0].districts,
                    defaultIndex: 0,
                }, {
                    values: result[0].districts[0].districts,
                    defaultIndex: 0,
                }]
                that.setData({
                    addrs: arrs
                })
            }
        })
    },


// 省市区变动
    onAreaChange(e) {
        const {
            picker,
            value,
            index
        } = e.detail;
        if (index === 0) {
            // 修改省
            picker.setColumnValues(1, value[0].districts);
            picker.setColumnValues(2, value[0].districts[0].districts);
        } else if (index === 1) {
            // 修改市
            picker.setColumnValues(2, value[1].districts);
        }
    },

    // 确认选择省市区
    onAreaConfirm(e) {
        let value = e.detail.value
        let addr_value = `${value[0].name}${value[1].name}${value[2].name}`;
        this.setData({
            province: value[0].name, // 省份
            city: value[1].name, // 城市
            district: value[2].name, // 区县
            province_adcode: value[0].adcode,
            city_adcode: value[1].adcode,
            district_adcode: value[2].adcode,
            area: addr_value,
            showArea: false,
        })
    },

2.3、效果

 

三、 注意事项

在开发者工具上预览和使用会明显感觉到滑动,点击卡顿,但在真机,手机预览的时候不会出现卡顿问题,体验感不错,发布了之后用正式版测目前也没有发现问题

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

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

相关文章

netstat -ano|findstr 使用方法

一、查看占用端口 &#xff0c;得到进程id netstat -ano|findstr “8080” 1&#xff1a;协议 2&#xff1a;本地地址 3&#xff1a; 外部地址 4&#xff1a; 状态 5&#xff1a; PID 二、查询进程ID对应的进程名称 tasklist|findstr “12448” 三、关闭单个进程 taskkill /…

Matlab 在一张图中画多个机械臂

在matlab中第一次画机械臂时&#xff0c;可能会出现的问题是Link函数不识别&#xff08;如出现Link输入参数不对等) 这大概率是因为缺少matlab工具箱&#xff0c;如图 需要下载该软件包&#xff0c;然后用Matlab打开&#xff0c;就能自动安装到matlab中。下载地址在这个超链接…

【Harbor】使用手册

一、Harbor使用方式 Harbor 作为镜像仓库&#xff0c;主要的交互方式就是 将镜像上传到Harbor上&#xff0c;以及从Harbor上下载指定镜像 在传输镜像前&#xff0c;可以先使用 Harbor 提供的权限管理&#xff0c;将项目设置为私有项目&#xff0c;并对不同用户设置不同角色&…

最详细修改antd组件select的滚动条样式

自带的select的滚动条样式又黑又粗,丑陋.接下来我们改造他 初始代码 .contain {.btn {margin-top: 60px;margin-left: 60px;:global {.ant-btn {width: 200px;height: 100px;border-radius: 6px;}}} } <div className{styles.contain}><Selectmode"tags"p…

KMPBC:KMP算法及其改进(kmp with bad character)

前言 最近在看字符串匹配算法&#xff0c;突然灵光一闪有了想法&#xff0c;可以把kmp算法时间效率提高&#xff0c;同时保持最坏时间复杂度O(nm)不变。其中n为主串长度&#xff0c;m为模式串长度&#xff0c;经测试可以块3-10倍&#xff0c;以为发现了新大陆&#xff0c;但是…

Deep Automatic Natural Image Matting

https://github.com/JizhiziLi/AIM 工程地址 抠图的传统方法通常是基于 trimap&#xff08;三值图&#xff09;对前景、背景和 alpha 进行估计&#xff0c;但当图像中的前景和背景颜色相似或有着比较复杂的纹理时&#xff0c;传统算法很难取得比较好的效果。 自动图像抠图(A…

《华为认证》双机热备份简介

定义 双机热备份&#xff08;Hot-Standby Backup&#xff09;是指&#xff0c;当两台设备在确定主用&#xff08;Master&#xff09;设备和备用&#xff08;Backup&#xff09;设备后&#xff0c;由主用设备进行业务的转发&#xff0c;而备用设备处于监控状态&#xff0c;同时…

windows C++python编译配置

python官网下载windows下的installer安装包&#xff0c;添加到命令行when installing download mingw&#xff0c;选seh&#xff0c;把g的所在目录添加到环境变量 stdc.h 添加到 xxx\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\bits&#xff0c;gcc的include目录下 …

23款奔驰GLS400升级原厂几何多光束大灯,让智能照亮您前行的路

奔驰几何多光束大灯核心特点就是通过内部的84颗可独立控制的LED光源&#xff0c;行车远光灯会甄别对向驶来的车辆或者行人&#xff0c;并且动态的跟随目标&#xff0c;之后阴影话该区域&#xff0c;避免晃到车辆和行人。

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限

文章目录 背景环境代码实现0. 项目结构图&#xff08;供参考&#xff09;1. 数据库中的表&#xff08;供参考&#xff09;2. 依赖&#xff08;pom.xml&#xff09;3. 配置文件&#xff08;application.yml&#xff09;4. 配置文件&#xff08;application-dev.yml&#xff09;5…

【仿写框架之仿写Tomact】四、封装HttpRequest对象(属性映射http请求报文)、HttpResponse对象(属性映射http响应报文)

文章目录 1、创建HttpRequest对象2、创建HttpResponse对象 1、创建HttpRequest对象 HttpRequest对象中的属性与HTTP协议中的内容对应&#xff0c;用于后序servlet从request中获取请求中的参数。 参照http请求报文&#xff1a; import java.io.BufferedReader; import java…

Spring-Bean的生命周期

目录 生命周期汇总 细分生命周期 1.实例化 2.属性赋值&#xff08;依赖注入&#xff09; 3.Aware接口 4.BeanPostProcessor接口 5.初始化 6.销毁 测试验证 类结构 业务类 测试类 生命周期汇总 Spring Bean 的生命周期见下图 &#xff08;一定记忆好下图&#x…

java Graphics 图片叠放在另一张图片上,生成文字图片(可设置多图一起放到底图上)

直接上代码&#xff1a; public static void createGTImage(GtInfo resultObj) {String backPath resultObj.getBackPath();String enterpriseName resultObj.getEnterpriseName();String gtResultPath resultObj.getGtResultPath();int gtResultPathX resultObj.getGtResu…

具身智能:人工智能的下一个浪潮

原创 | 文 BFT机器人 特斯拉 2023 年股东会上&#xff0c;马斯克强调了人形机器人对特斯拉未来的重要性&#xff0c;并预测其将成为公司的主要长期价值来源。他进一步表示&#xff1a;“如果人形机器人和人的比例大致为2比1&#xff0c;那么人们对机器人的需求可能达到100亿乃…

用二进制来输出一个数

用二进制来输出一个数 1&#xff0c;一个数 #include <stdio.h> #include <stdlib.h> #include <stdint.h>int main() {uint32_t m 0x00C00000;printf("m%o,m%d,m0x%x\n",m,m,m);binary(m);return 0; }2&#xff0c;方法 void binary(uint32_t…

Springboot 实践(7)springboot添加html页面,实现数据库数据的访问

前文讲解&#xff0c;项目已经实现了数据库Dao数据接口&#xff0c;并通过spring security数据实现了对系统资源的保护。本文重点讲解Dao数据接口页面的实现&#xff0c;其中涉及页面导航栏、菜单栏及页面信息栏3各部分。 1、创建html页面 前文讲解中&#xff0c;资源目录已经…

应届生如何快速通过软件测试面试?

应届生&#xff0c;没有实际项目经验怎么破&#xff1f; 面试的过程并不为为了显示面试官技术有多牛&#xff0c;也不是为了体现他们公司有多么难进而是考察你的能力和招聘需求是否相匹配&#xff0c;进而评估你能否满足工作需求&#xff0c;甚至实现更多的岗位期待。 弄清楚…

【【典型电路设计之片内存储器的设计之RAM的Verilog HDL描述一】】

典型电路设计之片内存储器的设计之RAM的Verilog HDL描述一 RAM是随机存储器&#xff0c;存储单元的内容可按需随意取出或存入。这种存储器在断电后将丢失所有数据&#xff0c;一般用来存储一些短时间内使用的程序和数据。 其内部结构如下图所示&#xff1a; 例&#xff1a;用…

C语言如何实现DES加密与解密

C语言实现DES加密解密 #include "des.h" //移位表 static Table_size const shiftTable[NumberOfKeys] {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}; //E扩展表 static Table_size const eTable[des_key_pc2_standard]{32, 1, 2, 3, 4, 5, 4, 5, 6, …

学校提升教学质量,这个方法很炸裂!

当今教育领域日益强调教学质量的提升和教师专业发展。为了实现这一目标&#xff0c;许多学校开始采用在线巡课系统来监控、评估和改进教学过程。 在线巡课系统作为一种创新的教学管理工具&#xff0c;不仅有助于教育管理者更好地了解教师的教学实践&#xff0c;还能够为教师提供…