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资料toString 方法
Mar 13 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
Apr 26 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
Apr 10 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
jQuery实现简单的日期输入格式化控件
Mar 12 Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
json前后端数据交互相关代码
Sep 19 Javascript
JavaScript实现矩形块大小任意缩放
Aug 25 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
使用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以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
房屋改造计划书
2014/01/10 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
学校食品安全责任书
2015/01/29 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
宣传委员竞选稿
2015/11/19 职场文书
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript