前言

微信小程序默认给我们提供了一个省市区的picker选择器,只需将mode设置为region即可

<picker
mode="region"
bindchange="bindRegionChange"
value="{{region}}"
custom-item="{{customItem}}"
>

因为小程序默认提供的省市区选择器只能保存名称,不能保存id,而且我也不需要选择三级城市,所以这里打算通过mode="multiSelector"来实现省份城市的选择

城市数据json格式

关于省份城市数据的获取,这里我通过接口去获取数据,返回的json格式为

{
"code": 0,
"msg": "success",
"data": [
{
"id": 2,
"name": "北京",
"children": [
{
"id": 36,
"name": "北京市"
}
]
}
]
}

在我们保存提交的时候只需要保存省份和城市的id即可

picker多列选择器的用法

<picker
mode="multiSelector"
@change="bindCityChange"
@columnchange="bindCityColumnChange"
:value="multiIndex"
:range="multiArray"
range-key="name"
>
<view class="picker">选择城市{{userInfo.province.name}},{{userInfo.city.name}}</view>
</picker>

设置picker mode属性为multiSelector

       mode="multiSelector"

1、这里需要注意的是,在mpvue中无法直接使用bindchange和bindcolumnchange,而是使用@change和@columnchange这种方式

2、value是一个数组,例如我们有两列

[["北京", "湖南"], ["长沙", "永州"]]

3、range也是一个数组,指定的是value值的选中索引值,下标从0开始,如[0,0]

4、如果我们的数据是一个二维对象数组,我们可以通过使用range-key来指定Object 中 key 的值作为选择器显示内容

5、当我们确认选中之后会触发@change事件

// 城市选择  获取选中的值 [0,0]  这里需要注意的是获取值的方式在mpvue中通过e.mp.detail.value而不是e.detail.value
bindCityChange(e) {
// 选中的值索引
console.log(e.mp.detail.value[0], e.mp.detail.value[1]);
// 选中的省份和城市数据
console.log(
this.multiArray[0][e.mp.detail.value[0]],
this.multiArray[1][e.mp.detail.value[1]]
);
this.userInfo.province = this.multiArray[0][e.mp.detail.value[0]];
this.userInfo.city = this.multiArray[1][e.mp.detail.value[1]];
},

6、在我们滚动每一列的值的时候会触发@columnchange事件

7、通过e.mp.detail.column和e.mp.detail.value可以获取到修改列对应的值

console.log(
"修改的列为",
e.mp.detail.column,
",值为",
e.mp.detail.value
);

通过获取到修改的数据更新multiIndex的值

// 监听滚动事件 滚动第一列 修改第二列数据
bindCityColumnChange(e) {
// 更新multiIndex的值
this.multiIndex[e.mp.detail.column] = e.mp.detail.value;
//加载对应省份下城市数据
switch (e.mp.detail.column) {
case 0:
// this.multiArray[1] = this.cityList[e.mp.detail.value].children;
this.multiArray = [
this.cityList,
this.cityList[e.mp.detail.value].children
];
break;
}
},
data() {
return {
multiIndex: [0, 0],
multiArray: [],
}
}

参考阅读

https://www.cnblogs.com/Oopa/p/7266976.html

https://developers.weixin.qq.com/miniprogram/dev/component/picker.html

mpvue微信小程序多列选择器用法:实现省份城市选择的更多相关文章

  1. 自定义省市选择器 微信小程序多列选择器

    由于微信小程序的选择器为省市区选择器共3列 如我仅需要省市2列的选择器 就需要我们另寻他法找来找去没有合适的 只能自己写了 1. 首先我们把所需要的省数据 市县数据放在一个 p_c.js 文件里面,使 ...

  2. 微信小程序多列选择器

    wxml <picker mode="multiSelector" bindchange="bindMultiPickerChange2" bindcol ...

  3. mpvue微信小程序http请求终极解决方案-fly.js

    fly.js是什么? 一个支持所有JavaScript运行环境的基于Promise的.支持请求转发.强大的http请求库.可以让您在多个端上尽可能大限度的实现代码复用(官网解释) fly.js有什么特 ...

  4. mpvue + 微信小程序 picker 实现自定义多级联动 超简洁

    微信小程序官网只提供了省市区的三级联动,实际开发中更多的是自定义的多级联动: 依照微信小程序官网提供的自定义多级联动,需要使用到picker 的多列选择器,即设置 mode = multiSelect ...

  5. 微信小程序----日期时间选择器(自定义精确到分秒或时段)

    声明 bug:由于此篇博客是在bindcolumnchange事件中做的值的改变处理,因此会出现当你选择时,没有点击确定,直接取消返回后,会发现选择框的值依然改变.造成原因:这一点就是由于在bindc ...

  6. mpvue微信小程序分包

    ## 微信小程序分包(mpvue) 使用mpvue分包示例:1.下载vue脚手架(先有node环境,v8.12.0) npm install -g vue-cli 2.先用vue初始化一个mpvue小 ...

  7. mpvue微信小程序项目踩坑记录

    1.mpvue入门教程, http://mpvue.com/mpvue/quickstart.html # . 先检查下 Node.js 是否安装成功 $ node -v v8.9.0 $ npm - ...

  8. 微信小程序 — 自定义picker选择器弹窗内容+textarea穿透bug

    微信小程序中定义好的几种picker选择器,不管是日期选择器还是地区选择器,或是其他的都只有定死的样式和内容. 但是大多数开发程序的情况下还是需要自己写样式的,或是内容的. 例如: 代码如下: < ...

  9. mpvue微信小程序开发随笔

    mpvue上手很快,学习成本低,目前是开源的,适合技术实力不是很强的公司采用. spring boot 做后台,开发效率杠杠的.建议会java的开发尽量使用spring boot 开发,省事. 最近用 ...

随机推荐

  1. Vue 随机分配的打扫卫生H5 :打扫让我快乐

    情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配. 活分别是 : 扫地 拖地 倒垃圾 擦桌子 人分别是: '军', '春', '龙', '东', '贤', '磊','卿' 但是,每次 ...

  2. Win 10 Revit 2019 安装过程,亲自踩的一遍坑,有你想要的细节

    首先就是安装吖,不管是管理员权限还是普通权限,都是以下这个问题,跟权限没关系 failed to load .....revitcontentpackui.dll (126) 尝试了网上能查到的各种方 ...

  3. python 面试题知识回顾

    1. python 函数 的参数传递 a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun(a) ...

  4. SQLite异常 qAdmin: Cannot perform this operation on a closed dataset.【申明:来源于网络】

    SQLite异常 qAdmin: Cannot perform this operation on a closed dataset. 当使用 SQLite administrator,打开SQLit ...

  5. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决

    textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...

  6. 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明

    第6章        RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1  初学者重要提示 6.2  KEI ...

  7. [Swift]LeetCode139. 单词拆分 | Word Break

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...

  8. awk小例子_2_数值统计脚本

    通信公司工作,经常处理各种协议接口,在统计协议接口字段内容时,需要统计字段填写的内容是否正确,和占比是多少.要是单次统计,估计会把人累死,写个脚本统计,轻松便捷. 举例:接口内容 这是一条话单,这样的 ...

  9. 【git】idea /git bash命令 操作分支

    1.需求 因为目前要对项目做一些改动,而项目又即将上线,这些新的改动又不需要一起上线,所以这个时候需要在原有的master分支上重新拉出一个分支进行开发. 2.分支操作 打开git bash工具→切换 ...

  10. Spring Data Jpa接口简介

    Repository接口 public interface Repository<T, ID> {....} 提供了按方法名称的查询方式: 提供了@Query的查询方式 可能遇到的错误: ...