小程序省市區(qū)三級聯(lián)動

微信小程序 picker 組件 mode=date 是三級聯(lián)動的,但是無法自定義。
picker-view 組件可以同時選擇多項,但是不能做到聯(lián)動,所以就想著要不采用3個 picker組件組合聯(lián)動試試。反正剛開始學,就來練練手,卷起袖子擼起來 >>>

// test.wxml
<view class="container">
    <view class="item">
        <text class="item-name">地址</text>
        <text class="item-content">{{province}} {{city}} {{area}}</text>
        <image class="arrow_left" src="../../images/play.png"></image>
    </view>
    <view style="display:flex;">
        <picker-view indicator-style="height: 50px;" style="width: 100%;height: 150px;text-align: center" value="{{value}}" bindchange="changeProvince">
            <picker-view-column>
                <view wx:for="{{provinces}}" wx:key="*this" style="line-height: 50px">{{item}}</view>
            </picker-view-column>
        </picker-view>
        <picker-view indicator-style="height: 50px;" style="width: 100%;height: 150px;text-align: center" value="{{value}}" bindchange="changeCity">
            <picker-view-column>
                <view wx:for="{{citys}}" wx:key="*this" style="line-height: 50px">{{item}}</view>
            </picker-view-column>
        </picker-view>
        <picker-view indicator-style="height: 50px;" style="width: 100%;height: 150px;text-align: center" value="{{value}}" bindchange="changeArea">
            <picker-view-column>
                <view wx:for="{{areas}}" wx:key="*this" style="line-height: 50px">{{item}}</view>
            </picker-view-column>
        </picker-view>
    </view>
</view>
//test.js  截取了部分省市區(qū)數(shù)據(jù)
  const placeArray = [
    {
      "name": "北京",
      "city": [{
        "name": "北京",
        "area": ["東城區(qū)", "西城區(qū)", "崇文區(qū)", "宣武區(qū)", "朝陽區(qū)", "豐臺區(qū)", "石景山區(qū)", "海淀區(qū)", "門頭溝區(qū)", "房山區(qū)", "通州區(qū)", "順義區(qū)", "昌平區(qū)", "大興區(qū)", "平谷區(qū)", "懷柔區(qū)", "密云縣", "延慶縣"]
      }]
    },

    {
      "name": "天津",
      "city": [{
        "name": "天津",
        "area": ["和平區(qū)", "河東區(qū)", "河西區(qū)", "南開區(qū)", "河北區(qū)", "紅橋區(qū)", "塘沽區(qū)", "漢沽區(qū)", "大港區(qū)", "東麗區(qū)", "西青區(qū)", "津南區(qū)", "北辰區(qū)", "武清區(qū)", "寶坻區(qū)", "寧河縣", "靜海縣", "薊  縣"]
      }]
    },

    {
      "name": "河北",
      "city": [

        {
          "name": "石家莊",
          "area": ["長安區(qū)", "橋東區(qū)", "橋西區(qū)", "新華區(qū)", "郊  區(qū)", "井陘礦區(qū)", "井陘縣", "正定縣", "欒城縣", "行唐縣", "靈壽縣", "高邑縣", "深澤縣", "贊皇縣", "無極縣", "平山縣", "元氏縣", "趙  縣", "辛集市", "藁", "晉州市", "新樂市", "鹿泉市"]
        },

        {
          "name": "唐山",
          "area": ["路南區(qū)", "路北區(qū)", "古冶區(qū)", "開平區(qū)", "新  區(qū)", "豐潤縣", "灤  縣", "灤南縣", "樂亭縣", "遷西縣", "玉田縣", "唐??h", "遵化市", "豐南市", "遷安市"]
        },

        {
          "name": "秦皇島",
          "area": ["海港區(qū)", "山海關區(qū)", "北戴河區(qū)", "青龍滿族自治縣", "昌黎縣", "撫寧縣", "盧龍縣"]
        },

        {
          "name": "邯鄲",
          "area": ["邯山區(qū)", "叢臺區(qū)", "復興區(qū)", "峰峰礦區(qū)", "邯鄲縣", "臨漳縣", "成安縣", "大名縣", "涉  縣", "磁  縣", "肥鄉(xiāng)縣", "永年縣", "邱  縣", "雞澤縣", "廣平縣", "館陶縣", "魏  縣", "曲周縣", "武安市"]
        },

        {
          "name": "邢臺",
          "area": ["橋東區(qū)", "橋西區(qū)", "邢臺縣", "臨城縣", "內丘縣", "柏鄉(xiāng)縣", "隆堯縣", "任  縣", "南和縣", "寧晉縣", "巨鹿縣", "新河縣", "廣宗縣", "平鄉(xiāng)縣", "威  縣", "清河縣", "臨西縣", "南宮市", "沙河市"]
        },

        {
          "name": "保定",
          "area": ["新市區(qū)", "北市區(qū)", "南市區(qū)", "滿城縣", "清苑縣", "淶水縣", "阜平縣", "徐水縣", "定興縣", "唐  縣", "高陽縣", "容城縣", "淶源縣", "望都縣", "安新縣", "易  縣", "曲陽縣", "蠡  縣", "順平縣", "博野", "雄縣", "涿州市", "定州市", "安國市", "高碑店市"]
        },

        {
          "name": "張家口",
          "area": ["橋東區(qū)", "橋西區(qū)", "宣化區(qū)", "下花園區(qū)", "宣化縣", "張北縣", "康保縣", "沽源縣", "尚義縣", "蔚  縣", "陽原縣", "懷安縣", "萬全縣", "懷來縣", "涿鹿縣", "赤城縣", "崇禮縣"]
        },

        {
          "name": "承德",
          "area": ["雙橋區(qū)", "雙灤區(qū)", "鷹手營子礦區(qū)", "承德縣", "興隆縣", "平泉縣", "灤平縣", "隆化縣", "豐寧滿族自治縣", "寬城滿族自治縣", "圍場滿族蒙古族自治縣"]
        },

        {
          "name": "滄州",
          "area": ["新華區(qū)", "運河區(qū)", "滄  縣", "青  縣", "東光縣", "海興縣", "鹽山縣", "肅寧縣", "南皮縣", "吳橋縣", "獻  縣", "孟村回族自治縣", "泊頭市", "任丘市", "黃驊市", "河間市"]
        },

        {
          "name": "廊坊",
          "area": ["安次區(qū)", "固安縣", "永清縣", "香河縣", "大城縣", "文安縣", "大廠回族自治縣", "霸州市", "三河市"]
        },

        {
          "name": "衡水",
          "area": ["桃城區(qū)", "棗強縣", "武邑縣", "武強縣", "饒陽縣", "安平縣", "故城縣", "景  縣", "阜城縣", "冀州市", "深州市"]
        }

      ]
    }];
  var provinces = [];
  var citys = [];
  var areas = [];

  function getProvinces(){
    for (let i = 0; i < placeArray.length; i++) {
      provinces.push(placeArray[i].name)
    }
    console.log(provinces)
  }

  function getCitys(n){
    citys = [];
    const theCitys = placeArray[n].city;
    for (let i = 0; i < theCitys.length; i++) {
      citys.push(theCitys[i].name)
    }
    console.log(citys)
  }

  function getAreas(m,n){
    areas = [];
    if(placeArray[m].city[n]){  //province修改,city.length會逐個變化,若變化后比變化前小,會報錯
      const theAreas = placeArray[m].city[n].area;
      for (let i = 0; i < theAreas.length; i++) {
        areas.push(theAreas[i])
      }
      console.log(areas)
    }
  }
  //初始化
  getProvinces()
  getCitys(0)
  getAreas(0,0)

Page({
  data:{
    provinces: provinces,
    province: provinces[0] || "",
    pIndex: 0,
    citys: citys || [],
    city: citys[0] || "",
    cIndex: 0,
    areas: areas || [],
    area: areas[0] || "",
    aIndex: 0
  },
  changeProvince: function(e){
    const val = e.detail.value
    getCitys(val)   //聯(lián)動
    getAreas(val,0)  //聯(lián)動
    this.setData({
      province: provinces[val],
      pIndex: val,
      citys: citys,
      city: citys[0],
      cIndex: 0,
      areas: areas,
      area: areas[0],
      aIndex: 0
    })
  },
  changeCity: function(e){
    const val = e.detail.value
    getAreas(this.data.pIndex,val)  //聯(lián)動
    this.setData({
      city: citys[val],
      cIndex: val,
      areas: areas,
      area: areas[0],
      aIndex: 0
    })
  },
  changeArea: function(e){
    const val = e.detail.value
    this.setData({
      area: areas[val],
      aIndex: val
    })
  }
})

效果如圖:


省市區(qū)三級聯(lián)動.gif

總結:湊合能用吧,歡迎板磚。缺點是,省市改變后,后面的數(shù)據(jù)不會滾動到最頂端來。暫時還不知道怎么搞,如果您有相應的解決辦法,還請給我留言,3Q _


自己找到了新的更簡單高效的解決方法:微信小程序:省市區(qū)三級聯(lián)動(升級版)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容