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 ajax中success和complete有哪些不同点
Nov 20 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
JS与jQ读取xml文件的方法
Dec 08 Javascript
使用jquery获取url及url参数的简单实例
Jun 14 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
解决vue 路由变化页面数据不刷新的问题
Mar 13 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
js正则匹配多个全部数据问题
Dec 20 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
php4的session功能评述(一)
2006/10/09 PHP
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
php搜索文件程序分享
2015/10/30 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
Python随机数random模块使用指南
2016/09/09 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
新闻专业应届生求职信
2013/10/31 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
学生检讨书范文
2014/10/30 职场文书
初一军训感言
2015/08/01 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python