微信小程序的省市區三級聯動須要使用到的是Picker多列選擇器,參考文檔:https://www.w3cschool.cn/weix...,html
案例中用到的省市區的json文件在文後發出出來。json
廢話很少說,來看看具體地實現吧。小程序
<picker class="placeholder" mode="multiSelector" bindchange="func_changeCitysChange" bindcolumnchange="func_changeCitysChangeColumn" value="{{ citysIndex }}" range="{{ cityArray }}"> <view class="picker">請選擇</view> </picker>
var arrays = common.getAreaInfo();//在頭部引入 省市區地址js,這裏封裝成了方法了。
data: { citysIndex: [0, 0, 0], //給一個初始值索引,由於有三列,因此3個0 },
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文件,點擊查看,提取碼: xy6v微信小程序
圖片示例數組