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 各浏览器的 Javascript 效率对比
Jan 23 Javascript
javascript笔记 String类replace函数的一些事
Sep 22 Javascript
jquery 使用简明教程
Mar 05 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 Javascript
Angular实现购物车计算示例代码
Feb 21 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 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
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php轻松实现文件上传功能
2016/03/03 PHP
php实现文章评论系统
2019/02/18 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python循环结构的应用场景详解
2019/07/11 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Python中无限循环需要什么条件
2020/05/27 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
城市精细化管理实施方案
2014/03/04 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
活动策划求职信模板
2014/04/21 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014年信访工作总结
2014/11/17 职场文书
2014年督导工作总结
2014/11/19 职场文书
财务稽核岗位职责
2015/04/13 职场文书