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 相关文章推荐
点击文章内容处弹出页面代码
Oct 01 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
Jul 26 Javascript
浅析webapp框架AngularUI的demo
Dec 21 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
JavaScript中的冒泡排序法
Aug 03 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
深入理解ES7的async/await的用法
Sep 09 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
vue实现微信分享功能
Nov 28 Javascript
JS获取动态添加元素的方法详解
Jul 31 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
window.open的功能全解析
2006/10/10 Javascript
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
js html实现计算器功能
2018/11/13 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
django项目中新增app的2种实现方法
2020/04/01 Python
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
自我鉴定三原则
2014/01/13 职场文书
民族团结先进个人材料
2014/02/05 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
MySQL数据库事务的四大特性
2022/04/20 MySQL