首页 > 课堂 > 小程序 > 正文

mpvue微信小程序多列选择器用法之省份城市选择的实现

2020-03-21 16:00:55
字体:
来源:转载
供稿:网友

前言

微信小程序默认给我们提供了一个省市区的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://developers.weixin.qq.com/miniprogram/dev/component/picker.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对VEVB武林网的支持。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表