微信小程序省市区联动,自定义地区字典
最近在做一个项目的时候遇到了这么一个问题,就是省市区的联动呢,我们需要自定义字典来设置,那么微信小程序自带的省市区选择就不能用了,经过三根烟的催化,终于写出来了。下面献上代码示例。
首先是在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),由于自己开发的程序的数据是很 ...
- 微信小程序数据分析之自定义分析
在小程序后台,微信已经提供了强大的数据分析功能,包括实时统计.访问分析.来源分析和用户画像功能,可以说对一般的数据分析已经完全足够了,但有时应用需要做一些更加精准的数据分析,比如具体到某一个页面的分享 ...
随机推荐
- solr 查询解析器
定义 查询解析器用于将查询语句(q参数)解析成搜索语法. 默认解析器:lucene Solr在查询的时候,用到了QueryParser对用户输入做解析,solr默认使用的解析器是lucene,被称之为 ...
- Web UI开发推荐!Kendo UI for jQuery自定义小部件——使用MVVM
Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...
- 小猿圈-IT自学人的小圈子 https://book.apeland.cn/details/54/
笔记链接 https://book.apeland.cn/details/54/ 学习视频 https://www.apeland.cn/python
- Hadoop-No.6之文件在HDFS中的位置
在设计一种HDFS模式时,首先应该决定文件的位置.标准化的位置会使得团队之间更容易查找和共享数据. 推荐HDFS目录结构实例.目录结构简化了不同组和用户的权限分配 /user/{username} 只 ...
- Mybatis的@UpdateProvider注解的使用(转)
废话不多说,直接上代码 @UpdateProvider(type = AppProvider.class, method = "updateApp") Integer update ...
- Python之subprocess模块的使用
1.subprocess调用系统的命令 #!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess import sys compl ...
- React之this.refs, 实现数据双向绑定
1.实现数据双向绑定 将input组件与this.state属性绑定,要么是readonly, 要么使用onChange事件: 获取input元素的value值,有两种方式: 1) e.target. ...
- linux C线程
一个应用程序可以启动若干个线程: 线程,是程序执行的最小单位: 一般一个最简单的程序最少有一个线程,就是程序本身,也是主函数: 一个线程阻塞不会影响另一个线程: 多线程的进程可以尽可能多的利用系统CP ...
- $message的问题
项目中出现$message的问题: 拉取数据成功后 this.$message.success("数据拉取成功")点击拉取第一次不出现,但是代码执行了,后来多次点击就出现了 原因: ...
- Android_(控件)使用ListView显示Android系统SD卡的文件列表_02
使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局item_filelayout(一个文件的单独存放) 运行截图: 程序结构 <?x ...