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 相关文章推荐
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
Dec 05 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
jQuery 调用WebService 实例讲解
Jun 28 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
Dec 25 Javascript
详解性能更优越的小程序图片懒加载方式
Jul 18 Javascript
Vue 项目分环境打包的方法示例
Aug 03 Javascript
Vue循环组件加validate多表单验证的实例
Sep 18 Javascript
详解Ant Design of React的安装和使用方法
Dec 27 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中static关键字原理的学习研究分析
2011/07/18 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
Vuex的热更替如何实现
2020/06/05 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Django的session中对于用户验证的支持
2015/07/23 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python 类之间的参数传递方式
2019/12/20 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
出生证明公证书
2014/04/09 职场文书
2015元旦节寄语
2014/12/08 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Python中Selenium对Cookie的操作方法
2021/07/09 Python