[前端] 微信小程序实现地区选择伪五级联动

1963 0
王子 2022-10-21 15:37:19 | 显示全部楼层 |阅读模式
本文实例为大家分享了微信小程序实现地区选择伪五级联动的具体代码,供大家参考,具体内容如下
效果图


这里采用的是自定义多列选择器picker mode="multiSelector"
  1. <view class="section">
  2.   <view class="section__title">多列选择器</view>
  3.   <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
  4.    <view wx:if="{{multiIndex[0]==0}}" class="picker" style='font-size:24rpx'>
  5.     当前选择:全国
  6.    </view>
  7.    <view wx:elif="{{multiIndex[1]==0}}" class="picker" style='font-size:24rpx'>
  8.     当前选择:{{multiArray[0][multiIndex[0]]}}
  9.    </view>
  10.    <view wx:elif="{{multiIndex[2]==0}}" class="picker" style='font-size:24rpx'>
  11.     当前选择:{{multiArray[0][multiIndex[0]]}}-{{multiArray[1][multiIndex[1]]}}
  12.    </view>
  13.    <view wx:elif="{{multiIndex[3]==0}}" class="picker" style='font-size:24rpx'>
  14.     当前选择:{{multiArray[0][multiIndex[0]]}}-{{multiArray[1][multiIndex[1]]}}-{{multiArray[2][multiIndex[2]]}}
  15.    </view>
  16.    <view wx:else class="picker" style='font-size:24rpx'>
  17.     当前选择:{{multiArray[0][multiIndex[0]]}}-{{multiArray[1][multiIndex[1]]}}-{{multiArray[2][multiIndex[2]]}}-{{multiArray[3][multiIndex[3]]}}
  18.    </view>
  19.   </picker>
  20. </view>
复制代码
multiArray包含4个数组(市县镇),multiIndex是4个数组对应选中下标
  1. onLoad: async function (options) {
  2. let chinaData = await getCountryList()
  3. chinaData.unshift({city: [],code: 0,name: "全部"})
  4. for(let one of chinaData){
  5.   one.city.unshift({county: [],code: 0,name: "全部"})
  6.   for(let two of one.city){
  7.    two.county.unshift({code: 0,name: "全部"})
  8.   }
  9. }
  10.   this.data.chinaData = chinaData;
  11.   let sheng = []; // 设置省数组
  12.   for(let i = 0; i < chinaData.length; i++) {
  13.    sheng.push(chinaData[i].name);
  14.   }
  15.   this.setData({
  16.    "multiArray[0]": sheng
  17.   })
  18.   this.getCity(); // 得到市
  19. },
  20.   bindMultiPickerChange: function(e) {
  21.   console.log(e);
  22. },
  23. bindMultiPickerColumnChange: function(e) {
  24.   let move = e.detail;
  25.   let index = move.column;
  26.   let value = move.value;
  27.   if (index == 0) {
  28.    this.setData({
  29.    multiIndex: [value,0,0,0]
  30.    })
  31.    this.getCity();
  32.   }
  33.   if (index == 1) {
  34.    this.setData({
  35.    "multiIndex[1]": value,
  36.    "multiIndex[2]": 0,
  37.    "multiIndex[3]": 0
  38.    })
  39.    this.getXian();
  40.   }
  41.   if (index == 2) {
  42.    this.setData({
  43.    "multiIndex[2]": value,
  44.    "multiIndex[3]": 0,
  45.    })
  46.    this.getZhen();
  47.   }
  48.   if (index == 3) {
  49.    this.setData({
  50.    "multiIndex[3]": value
  51.    })
  52.    this.getZhen();
  53.   }
  54. },
  55. getCity: function() { // 得到市
  56.   let shengNum = this.data.multiIndex[0];
  57.   let chinaData = this.data.chinaData;
  58.   let cityData = chinaData[shengNum].city;
  59.   let city = [];
  60.   for (let i = 0; i < cityData.length; i++) {
  61.    city.push(cityData[i].name)
  62.   }
  63.   this.setData({
  64.    "multiArray[1]": city
  65.   })
  66.   this.getXian();
  67. },
  68. getXian: function(e) { // 得到县
  69.   let shengNum = this.data.multiIndex[0];
  70.   let cityNum = this.data.multiIndex[1];
  71.   let chinaData = this.data.chinaData;
  72.   let xianData = chinaData[shengNum].city[cityNum].county;
  73.   let xian = [];
  74.   for (let i = 0; i < xianData.length; i++) {
  75.    xian.push(xianData[i].name)
  76.   }
  77.   this.setData({
  78.    "multiArray[2]": xian
  79.   })
  80.   this.getZhen();
  81. },
  82. async getZhen(){// 得到镇
  83.   let shengNum = this.data.multiIndex[0];
  84.   let cityNum = this.data.multiIndex[1];
  85.   let xianNum = this.data.multiIndex[2];
  86.   let chinaData = this.data.chinaData;
  87.   let zhen = [];
  88.   if(chinaData[shengNum].city[cityNum].county[xianNum].code == 0){
  89.    this.setData({
  90.     "multiArray[3]" : ["全部"]
  91.    })
  92.   }else{
  93.       //这里需要传县的code值获取镇的数据
  94.    let res = await getTownByCounty(chinaData[shengNum].city[cityNum].county[xianNum].code)
  95.    let zhenData = JSON.parse(res.data.data.json)
  96.    zhenData.unshift({code: 0,name: "全部"})
  97.    for (let i = 0; i < zhenData.length; i++) {
  98.     zhen.push(zhenData[i].name)
  99.    }
  100.    this.setData({
  101.     "multiArray[3]" : zhen
  102.    })
  103.   }
  104. }
复制代码
省市县数据返回类型


镇返回数据


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中国红客联盟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行