mpvue微信小程序多列选择器用法之省份城市选择的实现
前言
微信小程序默认给我们提供了一个省市区的picker选择器,只需将mode设置为region即可
因为小程序默认提供的省市区选择器只能保存名称,不能保存id,而且我也不需要选择三级城市,所以这里打算通过mode="multiSelector"来实现省份城市的选择
城市数据json格式
关于省份城市数据的获取,这里我通过接口去获取数据,返回的json格式为
{
"code":0,
"msg":"success",
"data":[
{
"id":2,
"name":"北京",
"children":[
{
"id":36,
"name":"北京市"
}
]
}
]
}
在我们保存提交的时候只需要保存省份和城市的id即可
picker多列选择器的用法
选择城市{{userInfo.province.name}},{{userInfo.city.name}}
设置pickermode属性为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.column和e.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){
case0:
//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://www.nhooo.com/article/121309.htm
- https://developers.weixin.qq.com/miniprogram/dev/component/picker.html
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。