mpvue微信小程序多列选择器用法之省份城市选择的实现


Posted in Javascript onMarch 07, 2019

前言

微信小程序默认给我们提供了一个省市区的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.columne.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://3water.com/article/121309.htm
  • https://developers.weixin.qq.com/miniprogram/dev/component/picker.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS连连看源码完美注释版(推荐)
Dec 09 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
AngularJS内建服务$location及其功能详解
Jul 01 Javascript
微信小程序 input输入及动态设置按钮的实现
Oct 27 Javascript
Vue工程模板文件 webpack打包配置方法
Dec 26 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
Vue中 key keep-alive的实现原理
Sep 18 Javascript
详解一个基于套接字实现长连接的express
Mar 28 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
Oct 11 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 #Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 #Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 #Javascript
从0到1构建vueSSR项目之路由的构建
Mar 07 #Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 #Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 #Javascript
mpvue全局引入sass文件的方法步骤
Mar 06 #Javascript
You might like
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
养殖项目策划书范文
2014/01/13 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
个人工作表现评价材料
2014/09/21 职场文书
中小学生学籍证明
2014/10/25 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
方法汇总:Python 安装第三方库常用
2022/04/26 Python