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 相关文章推荐
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
js实现精美的图片跟随鼠标效果实例
May 16 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
对象转换为原始值的实现方法
Jun 06 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 Javascript
微信小程序 template模板详解及实例代码
Mar 09 Javascript
Vue计算属性的使用
Aug 04 Javascript
layui实现数据表格点击搜索功能
Mar 26 Javascript
详解vue 命名视图
Aug 14 Javascript
js表达式与运算符简单操作示例
Feb 15 Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 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
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript 学习点滴记录
2009/04/24 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python生成IP段的方法
2015/07/07 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
通过cmd进入python的实例操作
2019/06/26 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python属于解释语言吗
2020/06/11 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
工程测量与监理专业应届生求职信
2013/11/27 职场文书
新学期教师寄语
2014/04/02 职场文书
网页美工求职信范文
2014/04/17 职场文书
班级团队活动方案
2014/08/14 职场文书
运动会加油稿20字
2014/11/15 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书