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 相关文章推荐
关于 byval 与 byref 的区别分析总结
Oct 08 Javascript
css图片自适应大小
Nov 28 Javascript
JS delegate与live浅析
Dec 21 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
跟我学习javascript的this关键字
May 28 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
socket.io学习教程之基本应用(二)
Apr 29 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 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打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
vue实现图片上传功能
2020/05/28 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
Python多继承顺序实例分析
2018/05/26 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
信息技术专业个人自我评价
2013/12/11 职场文书
物流仓储计划书
2014/01/10 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
挂靠协议书范本
2014/04/22 职场文书
文艺演出策划方案
2014/06/07 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android