千家信息网

微信小程序开发中如何实现三级联动地址选择器

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章将为大家详细讲解有关微信小程序开发中如何实现三级联动地址选择器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。picker和picker-view组件在正式介
千家信息网最后更新 2025年02月07日微信小程序开发中如何实现三级联动地址选择器

这篇文章将为大家详细讲解有关微信小程序开发中如何实现三级联动地址选择器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

picker和picker-view组件

在正式介绍实现之前,我们需要先来介绍下这两个组件,picker这个组件在前面的文章有简单介绍过,它是从底部弹起的滚动选择器,可以通过设置type的值来实现日期选择,时间选择以及普通的选择器,如果我们想实现上图三级联动地址选择效果,发现实现起来很困难,应该说是不能实现,因为picker普通选择器是只能有一列,如果想这实现三列的效果就需要另辟蹊径了。

既然是另辟蹊径,自然就会想到picker-view,该组件是一个嵌入页面的滚动选择器,该组件中可以放置多个picker-view-column,并且只能放置picker-view-column,其它组件是不会显示的,每一个picker-view-column就是一列。

picker-view有几个重要的属性,value是一个数组类型,数组中的数字依次表示 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。indicator-style和indicator-class可以设置选择器中间选中框的样式,他有一个事件bindchange,当我们滚动item时选择的item数据发生变化就会触发这个函数,并且可以通过event.detai.vaule(和上面介绍vaule含义相同)获取当前选择的是第几项(下标从 0 开始)。而对于picker-view-column高度会自动设置成与picker-view的选中框的高度一致。

省市县数据文件 存储了地址选择所需要用到的数据,主要是区域码和名字,然后通过下面代码将数据暴露出去,以供使用

module.exports = {  citys,  provinces,  areas}

wxml文件实现

  取消text>确定text>  view>    {{item.name}}view>picker-view-column>  {{item.name}}view>picker-view-column>  {{item.name}}view>picker-view-column>  picker-view>view>

主要就是上面有一个取消和确定供用户点击确认选择,以及picker-view 中包含三个picker-view-column组件,分别对应显示省市区,provinces,citys,areas是对应的数据,animation是选择控件可见或者不可见时的过渡动画。

样式wxss文件

.picker-view {  width: 100%;  display: flex;  z-index:12;  background-color: #fff;  flex-direction: column;  justify-content: center;  align-items: center;  position: fixed;  bottom: 0rpx;  left: 0rpx;  height: 40vh;}.picker-item {  line-height: 70rpx;  margin-left: 5rpx;  margin-right: 5rpx;  text-align: center;}

在js中我们在data中加入数据

/**   * 控件当前显示的数据   * provinces:所有省份   * citys 选择省对应的所有市,   * areas选择市对应的所有区   * areaInfo:点击确定时选择的省市县字符拼接   * animationAddressMenu:动画   * addressMenuIsShow:是否可见   */  data: {animationAddressMenu: {},addressMenuIsShow: false,value: [0, 0, 0],provinces: [],citys: [],areas: [],areaInfo:''  },

最重要的是在js文件开始处引入数据文件

var address = require('../../utils/city.js')

onLoad中初始化数据,默认显示北京

// 默认联动显示北京var id = address.provinces[0].idthis.setData({      provinces: address.provinces,      citys: address.citys[id],      areas: address.areas[address.citys[id][0].id],    })

事件的处理逻辑:

// 点击所在地区弹出选择框  selectDistrict: function (e) {var that = this// 如果已经显示,不在执行显示动画if (that.data.addressMenuIsShow) {      return}// 执行显示动画that.startAddressAnimation(true)  },  // 执行动画  startAddressAnimation: function (isShow) {    console.log(isShow)var that = thisif (isShow) {      // vh是用来表示尺寸的单位,高度全屏是100vh  that.animation.translateY(0 + 'vh').step()    } else {      that.animation.translateY(40 + 'vh').step()    }    that.setData({      animationAddressMenu: that.animation.export(),      addressMenuIsShow: isShow,    })  },  // 点击地区选择取消按钮  cityCancel: function (e) {this.startAddressAnimation(false)  },  // 点击地区选择确定按钮  citySure: function (e) {var that = thisvar city = that.data.cityvar value = that.data.value    that.startAddressAnimation(false)// 将选择的城市信息显示到输入框var areaInfo = that.data.provinces[value[0]].name + ',' + that.data.citys[value[1]].name + ',' + that.data.areas[value[2]].name    that.setData({      areaInfo: areaInfo,    })  },  // 点击蒙版时取消组件的显示  hideCitySelected: function (e) {    console.log(e)this.startAddressAnimation(false)  },  // 处理省市县联动逻辑  cityChange: function (e) {    console.log(e)var value = e.detail.valuevar provinces = this.data.provincesvar citys = this.data.citysvar areas = this.data.areasvar provinceNum = value[0]var cityNum = value[1]var countyNum = value[2]// 如果省份选择项和之前不一样,表示滑动了省份,此时市默认是省的第一组数据,if (this.data.value[0] != provinceNum) {      var id = provinces[provinceNum].id      this.setData({        value: [provinceNum, 0, 0],        citys: address.citys[id],        areas: address.areas[address.citys[id][0].id],      })    } else if (this.data.value[1] != cityNum) {      // 滑动选择了第二项数据,即市,此时区显示省市对应的第一组数据  var id = citys[cityNum].id      this.setData({        value: [provinceNum, cityNum, 0],        areas: address.areas[citys[cityNum].id],      })    } else {      // 滑动选择了区  this.setData({        value: [provinceNum, cityNum, countyNum]      })    }    console.log(this.data)  },

关于"微信小程序开发中如何实现三级联动地址选择器"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

选择 数据 组件 动画 文件 省市 地址 地区 省份 篇文章 高度 小程 开发 普通 重要 另辟蹊径 下标 事件 可以通过 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 周村区网络安全领导小组 巨兽战场服务器不够 服务器的前端代理配置 腾云科创数据库it技术分享 vs2005数据库 网络安全威胁的具体分析 常德网络安全中心地址 有神网络技术有限公司官网 网络技术与软件技术区别 简述数据库的备份与恢复过程 伊春市公安局网络安全宣传 软件开发时间规划 网络安全与政治纪律对照材料 全国计算机三级网络技术感悟 网络安全攻击产品 网络安全基础知识多选 怎么修改数据库的字段长度 育碧关闭90款游戏服务器 规范网络安全公众号分级 学校网络安全问卷调查 医院网络安全排名 电子技术集成电路方面的软件开发 企业常用网络技术 链家凶宅数据库怎么查 河北电商软件开发平台 短语网络安全的句子 上栗县网络安全信息林莉萍 网络安全类的认证 在检查网络安全的时候信号很差 浙江智能养老软件开发公司
0