小程序省市区三级联动的实现

微信小程序——省市区三级联动的实现

1.引入area.js :全国省市区

下载链接:https://pan.baidu.com/s/1z2jBXzvYDWEPT3d5LIrgKA 密码:pugd

2. address.wxml实例

    <view>
        <view>所在区域</view>
        <view class="item-view" bindtap="openPickerView">
          <text wx:if="{{!addressName}}" class="choose-area">请选择详细区域</text>
          <text wx:if="{{addressName}}" class="address-text">{{addressName}}</text>
      </view>
</view>

3. address.js实例代码

//引入area.js
const AreaData = require("area.js");

data: {
    addressName: '',  //所在地区
    provId: '', //省ID
    cityId: '',     //市ID
    areaId: '', //区ID
    showPickerView: false,  //控制省市区三级联动显隐
    isdefault: false,//控制设置默认地址
    value: [0, 0, 0],
    tempValue: [0, 0, 0],
    provArr: AreaData.result, //省数组
    cityArr: AreaData.result[0].city, //市数组
    areaArr: AreaData.result[0].city[0].area, //区数组
  },
/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
      let addressData = JSON.parse(options.addressData);
      that.saveAddressData(addressData);
  },

saveAddressData(addressData) {
    let ProvArr = AreaData.result;
    let valArr = [];
    // 遍历省数组
    for (let i = 0; i < ProvArr.length; i++) {
      // console.log(ProvArr[i].id); 
      // 找到省对应的id
      if (ProvArr[i].id == addressData.province) {
        //提取对应省名
        let provName = ProvArr[i].name;
        // 提取对应省名在数组中对应的id
        valArr.push(i);
        // 提取对应省名下的城市数组
        let cityArr = ProvArr[i].city;
        console.log('provName:', provName);
        console.log('valArr:', valArr);
        // 遍历对应省名下的城市数组
        for (let j = 0; j < ProvArr[i].city.length; j++) {
          //console.log("cityId", ProvArr[i].city[j].id);
          // 找到市对应的id
          if (ProvArr[i].city[j].id == addressData.city) {
            // 提取对应市名
            let cityName = ProvArr[i].city[j].name;
            // 提取对应市名在数组中对应的id
            valArr.push(j);
            // 提取对应市名下的区数组
            let areaArr = ProvArr[i].city[j].area;
            console.log('cityName:', cityName);
            console.log('valArr:', valArr);
            // 遍历对应市名下的区数组
            for (let k = 0; k < ProvArr[i].city[j].area.length; k++) {

              // 找到区对应的id
              if (ProvArr[i].city[j].area[k].id == addressData.region) {
                // 提取对应区名
                let areaName = ProvArr[i].city[j].area[k].name;
                // 提取对应区名在数组中对应的id
                valArr.push(k);

                let addressName = provName + cityName + areaName;
                this.setData({
                  address: addressData.address,
                  addressName: addressName,
                  value: valArr,
                  cityArr: cityArr,
                  areaArr: areaArr,
                  provId: addressData.provName,
                  cityId: addressData.cityName,
                  areaId: addressData.areaName,
                  isdefault: addressData.isdefault == 1 ? true : false
                })
              }
            }
          }
        }

      }
    }
  },
//三级联动触发方法
  bindChange: function (e) {
    let val = e.detail.value
    if (val[0] != this.data.tempValue[0]) {
      val = [val[0], 0, 0]
    }
    if (val[1] != this.data.tempValue[1]) {
      val = [val[0], val[1], 0]
    }
    console.log('bindChange:', val);
    this.setData({
      tempValue: val,
      value: val,
      cityArr: AreaData.result[val[0]].city,
      areaArr: AreaData.result[val[0]].city[val[1]].area,
    })
  },

  //打开省市区三级联动
  openPickerView() {
    this.setData({
       showPickerView: true,
       dleg3:true,
        });
  },
  //关闭省市区三级联动
  closePickerView() {
    this.setData({ 
      showPickerView: false ,
      dleg3: false,
    });
  },

  //省市区三级联动确定
  confirmPickerView() {
    let val = this.data.value;
    let provName = AreaData.result[val[0]].name;
    let cityName = AreaData.result[val[0]].city[val[1]].name;
    let areaName = AreaData.result[val[0]].city[val[1]].area[val[2]].name;
    let addressName = provName + cityName + areaName;
    let provId = AreaData.result[val[0]].id;
    let cityId = AreaData.result[val[0]].city[val[1]].id;
    let areaId = AreaData.result[val[0]].city[val[1]].area[val[2]].id;
    this.setData({
      addressName: addressName,
      provId: provName,
      cityId: cityName,
      areaId: areaName,
      showPickerView: false,
      isdefault: addressData.isdefault == 1 ? true : false
    })
  },

 //设为默认地址
  bindDefAddress() {
    this.setData({ isdefault: !this.data.isdefault });
  },
  //取消按钮
  bindCancelButton() {
    wx.navigateBack();
  },
地区码area.js大全 代码示例: var dsy = new Dsy(); dsy.add("0",["北京市","天津市","上海市","重庆市","河北省","山西省","内蒙古","辽宁省","吉林省","黑龙江省","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","广西","海南省","四川省","贵州省","云南省","西藏","陕西省","甘肃省","青海省","宁夏","新疆","香港","澳门","台湾省"]); dsy.add("0_0_0",["东城区","西城区","崇文区","宣武区","朝阳区","丰台区","石景山区","海淀区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区","怀柔区","平谷区","密云县","延庆县","延庆镇"]); dsy.add("0_0",["北京市"]); dsy.add("0_1_0",["和平区","河东区","河西区","南开区","河北区","红桥区","塘沽区","汉沽区","大港区","东丽区","西青区","津南区","北辰区","武清区","宝坻区","蓟县","宁河县","芦台镇","静海县","静海镇"]); dsy.add("0_1",["天津市"]); dsy.add("0_2_0",["黄浦区","卢湾区","徐汇区","长宁区","静安区","普陀区","闸北区","虹口区","杨浦区","闵行区","宝山区","嘉定区","浦东新区","金山区","松江区","青浦区","南汇区","奉贤区","崇明县","城桥镇"]); dsy.add("0_2",["上海市"]); dsy.add("0_3_0",["渝中区","大渡口区","江北区","沙坪坝区","九龙坡区","南岸区","北碚区","万盛区","双桥区","渝北区","巴南区","万州区","涪陵区","黔江区","长寿区","合川市","永川区市","江津市","南川市","綦江县","潼南县","铜梁县","大足县","荣昌县","璧山县","垫江县","武隆县","丰都县","城口县","梁平县","开县","巫溪县","巫山县","奉节县","云阳县","忠县","石柱土家族自治县","彭水苗族土家族自治县","酉阳土家族苗族自治县","秀山土家族苗族自治县"]); dsy.add("0_3",["重庆市"]); ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值