uniapp实现省市县三级联动

先说下后端返回的数据
后端省市县返回数据格式如下:
code:编码,为空时返回所有省份
type : 类型 ,1返回市 2 返回区县,不传就返回省
例如:(下面是省的数据)如果再传(type:1,code:130000)就会返回河北省的数据
在这里插入图片描述

<view v-if="visible"
          class="ad_box">
      <view class="title">
        <view class="left"
              @tap="cancel">取消</view>
        <view class="right"
              @tap="exactly">确定</view>
      </view>
      <picker-view style="height:140px"
                   class="picker_box"
                   :indicator-style="indicatorStyle"
                   @change="changePicker">
        <picker-view-column class="picker_col">
          <view v-for="item in provinceData"
                :key="item.region_code">{{item.region_name}}</view>
        </picker-view-column>
        <picker-view-column class="picker_col">
          <view v-for="item in cityData"
                :key="item.region_code">{{item.region_name}}</view>
        </picker-view-column>
        <picker-view-column class="picker_col">
          <view v-for="item in areaData"
                :key="item.region_code">{{item.region_name}}</view>
        </picker-view-column>
      </picker-view>
      <view class="mask"></view> <!-- 遮罩层 -->
    </view>
  </view>
  <script>

import * as loginServer from '@/api/login/login'
import { mapState } from 'vuex'
export default {

  data () {
    return {
      visible: false,
      PCAType: { //临时储存type 与code
        code: '',
        type: 0
      },
      valueArr: [0, 0, 0], //用于判断当前滑动的那一列
      provinceData: [], //省数据
      cityData: [],//市数据
      areaData: [] //区数据
    }
  },
  methods: {
    changePicker (val) {
      console.log(val)
      console.log(val.detail.value)
      let arr = val.detail.value //拿到改变的数组 
      if (this.valueArr[0] !== arr[0]) {
        this.PCAType.code = this.provinceData[arr[0]].region_code
        this.cityGetRegion()
      } else if (this.valueArr[1] !== arr[1]) {
        this.PCAType.code = this.cityData[arr[1]].region_code
        this.areaGetRegion()
      }
      this.valueArr = arr
    },
    enable () { //打开省市县选择器
      this.visible = true
      this.provinceGetRegion()
    },
    cancel () { //取消
      console.log('cancel')
      this.PCAType.type = 0
      this.PCAType.code = ''
      this.valueArr = [0, 0, 0]
      this.visible = false
    },
    exactly () { //确定
      this.PCAType.code = 0
      this.PCAType.type = 0
      this.userAllInfo.province = this.provinceData[this.valueArr[0]].region_name
      this.userAllInfo.city = this.cityData[this.valueArr[1]].region_name
      this.userAllInfo.county = this.areaData[this.valueArr[2]].region_name
      this.valueArr = [0, 0, 0]
      this.visible = false
    },
    provinceGetRegion () { //获取省市县数据
      loginServer.getRegion(this.PCAType)
        .then(res => {
          this.PCAType.code = res[0].region_code
          console.log(res)
          this.provinceData = res
          this.cityGetRegion()
        })
    },
    cityGetRegion () { //获取市数据
      this.PCAType.type = 1
      loginServer.getRegion(this.PCAType)
        .then(res => {
          this.PCAType.code = res[0].region_code
          console.log(res)
          this.cityData = res
          this.areaGetRegion()
        })
    },
    areaGetRegion () { //获取区县数据
      this.PCAType.type = 2
      loginServer.getRegion(this.PCAType)
        .then(res => {
          console.log(res, '===============')
          this.areaData = res
        })
    }
  }
}
</script>
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp是一款跨平台的开发框架,可以用于开发多种类型的应用程序,包括小程序、H5、App等。对于自定义省市三级联动组件,我们可以参照以下步骤来实现。 首先,我们需要获取省市的数据源,可以从后台接口获取或者使用静态的json文件。将数据源存储在data的变量中。 接下来,我们可以创建一个Picker组件来实现三级联动选择。通过使用uni-app的Picker组件,我们可以选择省份,然后根据选择的省份,展示对应的城市和区的选项。同时,需在Picker组件上设置改变省份选项时的change事件,以及城市和区选项的列数、初始值等属性。 在change事件中,我们根据选择的省份,从数据源中获取对应的城市和区选项,并更新到data的变量中。然后,将更新后的data传递给Picker组件,刷新选项。 最后,我们可以在页面上引入并使用自定义的省市三级联动组件。通过v-model指令,将选择的省市的值与页面的数据进行双向绑定,并可以在提交时获取选中的省市的值,进行后续的业务处理。 通过以上步骤,我们可以实现自定义的省市三级联动组件。根据不同的需求,我们还可以对组件进行优化和扩展,例如添加搜索功能、增加默认值等。总之,Uniapp提供了强大的开发能力,可以帮助我们轻松地实现自定义的省市三级联动组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值