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 相关文章推荐
JavaScript 学习笔记(十一)
Jan 19 Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 Javascript
jquery手风琴特效插件
Feb 04 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
axios 处理 302 状态码的解决方法
Apr 10 Javascript
vue中使用protobuf的过程记录
Oct 26 Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 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
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
php格式化时间戳
2016/12/17 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
Python  连接字符串(join %)
2008/09/06 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
python实现井字棋小游戏
2020/03/04 Python
详解python中的异常捕获
2020/12/15 Python
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
在校大学生的职业生涯规划书
2014/03/14 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
财产分割协议书
2016/03/22 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
家电创业计划书
2019/08/05 职场文书
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技