微信小程序省市区联动,自定义地区字典

最近在做一个项目的时候遇到了这么一个问题,就是省市区的联动呢,我们需要自定义字典来设置,那么微信小程序自带的省市区选择就不能用了,经过三根烟的催化,终于写出来了。下面献上代码示例。
首先是在utils文件夹存入arealist.js文件,内容为:
const areaList=[
{
name:'河南',
id:,
parentId:
},{
name:'浙江',
id:,
parentId:
},{
name:'郑州',
id:,
parentId:
},{
name:'新乡',
id:,
parentId:
},{
name:'洛阳',
id:,
parentId:
},{
name:'二七区',
id:,
parentId:
},{
name:'金水区',
id:,
parentId:
},{
name:'高新区',
id:,
parentId:
},{
name:'中原区',
id:,
parentId:
},{
name:'封丘县',
id:,
parentId:
},{
name:'原阳县',
id:,
parentId:
},{
name:"延津县",
id:,
parentId:
},{
name:'获嘉县',
id:,
parentId:
},{
name:'孟津县',
id:,
parentId:
},{
name:'新安县',
id:,
parentId:
},{
name:'杭州市',
id:,
parentId:
},{
name:'台州市',
id:,
parentId:
},{
name:'西湖区',
id:,
parentId:
},{
name:'滨江区',
id:,
parentId:
},{
name:'余杭区',
id:,
parentId:
},{
name:'椒江区',
id:,
parentId:
},{
name:'黄岩区',
id:,
parentId:
}
];
module.exports = areaList;
然后在需要的页面引入地区字典,并且在onLoad的时候解析字典,遍历出一级数据,留备后用。
const areaList=require('../../utils/arealist.js');
Page({
data: {
multiArray: [],
multiIndex: [, , ],
province:[]
},
bindMultiPickerChange: function (e) {
console.log('picker发送选择改变,携带值为', e.detail.value)
this.setData({
multiIndex: e.detail.value
})
},
bindMultiPickerColumnChange: function (e) {
console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
var data = {
multiArray: this.data.multiArray,
multiIndex: this.data.multiIndex
};
data.multiIndex[e.detail.column] = e.detail.value;
const provinceName=data.multiArray[][data.multiIndex[]];
let provinceId="";
let province = this.data.province;
let quyuList = [], cityList = [], provinceList=[],city=[],area=[];
try {
province.forEach(item => {
if (item.name === provinceName) {
provinceId = item.id;
throw (new Error('find item'))
}
})
} catch (err) {
}
city = areaList.filter(item => {
return item.parentId == provinceId;
})
if (e.detail.column==){
data.multiIndex=[e.detail.value,,];
try{
area = areaList.filter(item => {
return item.parentId == city[data.multiIndex[]].id;
})
}catch(err){}
} else if (e.detail.column == ){
data.multiIndex[]=;
area = areaList.filter(item => {
return item.parentId == city[e.detail.value].id;
})
}else{
const cityName = data.multiArray[][data.multiIndex[]];
let cityId='';
try{
areaList.forEach(item=>{
if(item.name===cityName){
cityId=item.id;
throw(new Error('find item'));
}
})
}catch(err){}
area=areaList.filter(item=>{
return item.parentId==cityId;
})
}
provinceList = province.map(item => {
return item.name
})
cityList = city.map(item => {
return item.name;
})
quyuList = area.map(item => {
return item.name;
})
data.multiArray= [provinceList, cityList, quyuList],
this.setData(data);
},
onLoad(){
var province = [], city = [], area = [];
province=areaList.filter(item => {
return item.parentId == ;
})
city = areaList.filter(item => {
return item.parentId == province[].id;
})
area = areaList.filter(item => {
return item.parentId == city[].id;
})
var provinceList = province.map(item => {
return item.name
})
var cityList = city.map(item => {
return item.name;
})
var quyuList = area.map(item => {
return item.name;
})
this.setData({
multiArray: [provinceList, cityList, quyuList],
province
})
}
})
下面是wxml页面,想要看一下效果的可以直接贴去看下
<view class="section">
<view class="section__title">多列选择器</view>
<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
<view class="picker">
当前选择:{{multiArray[][multiIndex[]]}},{{multiArray[][multiIndex[]]}},{{multiArray[][multiIndex[]]}}
</view>
</picker>
</view>
提示:在微信开发者工具中会出现一级目录选项改变二级目录的选项没有把index回置为0的问题,但是在真机调试的时候并未发现此问题。暂未找到相关解释
微信小程序省市区联动,自定义地区字典的更多相关文章
- 微信小程序页面调用自定义组件内的事件
微信小程序页面调用自定义组件内的事件 page page.json { "usingComponents": { "my-component": ". ...
- 微信小程序底部实现自定义动态Tabbar
多图警告!!! 最近在工作中遇到这样一个需求:微信小程序底部的Tab需要通过判断登录人的角色动态进行改变,想要实现这个功能依靠小程序原生的Tabbar是不可能实现的了,所以研究了一下自定义Tab,这里 ...
- mpvue + 微信小程序 picker 实现自定义多级联动 超简洁
微信小程序官网只提供了省市区的三级联动,实际开发中更多的是自定义的多级联动: 依照微信小程序官网提供的自定义多级联动,需要使用到picker 的多列选择器,即设置 mode = multiSelect ...
- 微信小程序-多级联动
微信小程序中的多级联动 这里用到的案例是城市选择器 先上代码: .wxml <view class="{{boxHide}}"> <view>{{nian} ...
- 微信小程序省市联动
最近呢刚好做了一个省市联动的功能,今天看到有人问这个怎么做,我就把我做的放上来共享一下: 首先呢,来看看效果,点击文字'点击',弹出选择窗口,点击取消或者确定(取消.确定按钮在选择框上边,截图有些不清 ...
- 微信小程序分享支持自定义封面图
微信小程序又发布更新了,刚好昨天支付宝也发布小程序,不能让它抢了风头的节奏.微信小程序主要更新如下:“小程序分享支持自定义封面图,公众号及小程序客服可发送小程序卡片.同时,我们还开放了获取发票抬头,指 ...
- 微信小程序中的自定义组件
微信小程序中的组件 前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- 微信小程序数据分析之自定义分析
在小程序后台,微信已经提供了强大的数据分析功能,包括实时统计.访问分析.来源分析和用户画像功能,可以说对一般的数据分析已经完全足够了,但有时应用需要做一些更加精准的数据分析,比如具体到某一个页面的分享 ...
随机推荐
- 部署NFS共享
一:NFS工作原理 什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将 ...
- Eclipse指定jdk启动
在eclipse.ini文件中加入这一句话: -vm D:/Java/jdk/jdk1.8/jre/bin/server/jvm.dll
- robotframework FOR循环
#获取到的ID组装成一个list ${List_ID} Create List ${ID_1} ${ID_2} ${ID_3} ${ID_4} ${ID_5} ... ${ID_6} ${ID_7} ...
- Laravel dingo,HTTP的请求头(accept)无法携带版本号的解决方法
Laravel dingo,HTTP的请求头(accept)无法携带版本号的解决方法 2017年9月6日 原创分享 zencodex 使用 Laravel dingo 做api开发时,涉及 A ...
- Linux环境下软件安装
下载——解压缩: 把得到的目录放到一个不碍事的目录,我们可以设置隐藏目录: 查看可执行程序: 如何变成系统命令? PATH:一个可执行程序只要放到这些目录中任何一个就可以,就可以变成系统识别的命令,当 ...
- 用electrion打包angular成桌面应用
用electrion官网的不行. 还好,可以直接照搬 https://github.com/maximegris/angular-electron 安装必要的库 npm i --save-dev el ...
- matplotlib中 plt.plot() 函数中**kwargs的参数形式
plt.plot(x, y, **kwargs) **kwargs的参数大致有如下几种: color: 颜色 linestyle: 线条样式 marker: 标记风格 markerfacecolor: ...
- 初始jquery(5)
一.什么是JQuery: JQuery是对JavaScript的封装,简化了JS代码,是主流框架的基础(VUE,EasyUI,Bootstrap) 它是2006年推出的 二.JQuery的优势: 1. ...
- JavaWeb-SpringSecurity初认识
Spring Security 安全 百度百科 功能:Spring Security对Web安全性的支持大量地依赖于Servlet过滤器.这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安 ...
- Servlet——理解会话Session
1.什么是会话(Session) 超文本传输协议(HTTP)被设计成一种无状态的协议. 所谓无状态协议就是指在服务器端的请求彼此相互之间是不认识彼此的,哪怕是来自同一个客户端的请求,相互之间也是不认识 ...