微信小程序省市区 picker选择器地址联动

<view>
  <picker mode="multiSelector" bindchange="func_changeCitysChange" bindcolumnchange="func_changeCitysChangeColumn"
    value="{{ citysIndex }}" range="{{ cityArray }}">
    <view>{{ssq}}</view>
  </picker>
</view>
// pages/text/text.js
var commonJS = require("../../utils/common.js");
const app = getApp();
var arrays = commonJS.getAreaInfo();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    citysIndex: [0, 0, 0], //给一个初始值索引,因为有三列,所以3个0
    cityArray: [],
    ssq: "请选择",
  },

  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,//获取选中的省市区
    });
  },


  /**
   * 生命周期函数--监听页面加载
   */
  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
    });
  },
})

省市区的commonJS

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值