微信小程序picker實現的省市區三級聯動

微信小程序的省市區三級聯動須要使用到的是Picker多列選擇器,參考文檔:https://www.w3cschool.cn/weix...html

案例中用到的省市區的json文件在文後發出出來。json

廢話很少說,來看看具體地實現吧。小程序

視圖view

<picker class="placeholder" mode="multiSelector" 
bindchange="func_changeCitysChange" 
bindcolumnchange="func_changeCitysChangeColumn" value="{{ citysIndex }}" range="{{ cityArray }}">
  <view class="picker">請選擇</view>
</picker>

JS代碼

var arrays = common.getAreaInfo();//在頭部引入 省市區地址js,這裏封裝成了方法了。

data:

data: {    

    citysIndex: [0, 0, 0], //給一個初始值索引,由於有三列,因此3個0

  },

onLoad:

onLoad: function(options) {
    var that = this;
    if (wx.getStorageSync('global_cityData')) {
      var cityArray = wx.getStorageSync('global_cityData');
    } else {
      //定義三列空數組
      var cityArray = [
        [],
        [],
        [],
      ];
      for (let i = 0, len = arrays.length; i < len; i++) {
        switch (arrays[i]['level']) {
          case 1:
            //第一列
            cityArray[0].push(arrays[i]["name"]);
            break;
          case 2:
            //第二列(默認由第一列第一個關聯)
            if (arrays[i]['sheng'] == arrays[0]['sheng']) {
              cityArray[1].push(arrays[i]["name"]);
            }
            break;
          case 3:
            //第三列(默認第一列第一個、第二列第一個關聯)
            if (arrays[i]['sheng'] == arrays[0]['sheng'] && arrays[i]['di'] == arrays[1]['di']) {
              cityArray[2].push(arrays[i]["name"]);
            }
            break;
        }
      }
      wx.setStorageSync('global_cityData', cityArray);
    }

    that.setData({
      cityArray: cityArray
    });
  },

下面就是兩個事件了

func_changeCitysChange: function(e) {
    var that = this;
    var cityArray = that.data.cityArray;

    var address='';
    if (that.data.ssq == undefined){
      //下面方法中沒有設置ssq,應該給它默認值 ,此時citysIndex至關於[0,0,0]
      var citysIndex = that.data.citysIndex;
      for (let i in citysIndex) {
        address += cityArray[i][citysIndex[i]]
      }
    }else{
      address = that.data.ssq;
    }

    wx.showModal({
      title: '',
      content: address+'',
    })
  },
  func_changeCitysChangeColumn: function(e) {
    var that = this;
    var cityArray = that.data.cityArray;

    var list1 = []; //存放第二列數據,即市的列
    var list2 = []; //存放第三列數據,即區的列
    
    var citysIndex = [];
    //主要是注意地址文件中的字段關係,省、市、區關聯的字段有 sheng、di、level
    switch (e.detail.column) {
      case 0:
        //滑動左列
        for (let i = 0, len = arrays.length; i < len; i++) {          
          if (arrays[i]['name'] == cityArray[0][e.detail.value]) {
            var sheng = arrays[i]['sheng'];
          }
          if (arrays[i]['sheng'] == sheng && arrays[i]['level'] == 2) {
            list1.push(arrays[i]['name']);
          }
          if (arrays[i]['sheng'] == sheng && arrays[i]['level'] == 3 && arrays[i]['di'] == arrays[1]['di']) {
            list2.push(arrays[i]['name']);
          }
        }       
        

        citysIndex = [e.detail.value, 0, 0];
        var ssq = cityArray[0][e.detail.value] + list1[0] + list2[0]+'';          

        that.setData({
          global_sheng: sheng
        });  
        break;
      case 1:
        //滑動中列
        var  di;
        var sheng = that.data.global_sheng;
        list1 = cityArray[1];
        for (let i = 0, len = arrays.length; i < len; i++) {     
          if (arrays[i]['name'] == cityArray[1][e.detail.value]) {
            di = arrays[i]['di'];
          }         
        } 
        for (let i = 0, len = arrays.length; i < len; i++) {
          if (arrays[i]['sheng'] == sheng && arrays[i]['level'] == 3 && arrays[i]['di'] == di) {
            list2.push(arrays[i]['name']);
          }
        }
        citysIndex = [that.data.citysIndex[0], e.detail.value, 0];
        
        var ssq = cityArray[0][that.data.citysIndex[0]] + list1[e.detail.value] + list2[0] + '';

        break;
      case 2:
        //滑動右列
        list1 = cityArray[1];
        list2 = cityArray[2];
        citysIndex = [that.data.citysIndex[0], that.data.citysIndex[1], e.detail.value];

        var ssq = cityArray[0][that.data.citysIndex[0]] + list1[that.data.citysIndex[1]] + list2[e.detail.value] + '';
        break;
    }

    that.setData({
      "cityArray[1]": list1,//從新賦值中列數組,即聯動了市
      "cityArray[2]": list2,//從新賦值右列數組,即聯動了區
      citysIndex: citysIndex,//更新索引
      ssq: ssq,//獲取選中的省市區
    });
  },

用到的省市區js文件,點下面連接。

省市區js文件,點擊查看,提取碼: xy6v微信小程序

圖片示例數組

小程序省市區聯動

相關文章
相關標籤/搜索