省市联动选择器,地址选择,开箱即用

先上效果图,开箱即用
省市级联效果图1
省市级联效果图2
省市级联效果图3
代码如下

<template>
  <!-- <select v-model="province" class="width_120">
    <option v-for="p in allCity" :label="p.province" :value="p.province"></option>
  </select>
  <select v-model="country" class="width_120">
    <option v-for="c in countries" :value="c">{{c}} </option>
  </select>
  <input v-model="detailedAdress" class="width_200 "> -->

  <el-select v-model="province" placeholder="请选择省份" size="mini" class="width_180">
    <el-option v-for="p in allCity" :label="p.province" :value="p.province"></el-option>
  </el-select>
  <el-select v-model="country" placeholder="请选择城市" size="mini" class="width_120">
    <el-option v-for="c in countries" :value="c"> </el-option>
  </el-select>
  <el-input  v-model="detailedAdress" size="mini" class="width_200 "></el-input>
</template>
<script>
import { defineComponent, reactive, toRefs, watch } from "vue";

export default defineComponent({
  setup(props, { emit }) {
    const state = reactive({
      province: '',
      country: '',
      detailedAdress: '',
	  allCity: [
       {
          province: "北京市",
          cities: [
            "东城区",
            "西城区",
            "朝阳区",
            "丰台区",
            "石景山区",
            "海淀区",
          ],
        },
        {
          province: "天津市",
          cities: [
            "和平区",
            "河东区",
            "河西区",
            "南开区",
            "河北区",
            "红桥区",
          ],
        },
      ],
      countries: [],
    });
      watch(() => [state.province, state.country], ([newprovince,newcountry],[oldprovince,oldcountry]) => {
      // 省份变化清空市级数据并重新刷新市级数据
        if(oldprovince !== newprovince) {
        const arr = state.allCity.filter((item) => item.province == state.province);
        state.countries = arr[0].cities;
        state.country = "";
        }
        // 省份和市级变化都会清空input内容
        state.detailedAdress = "";
      }
    );  

    return {
      ...toRefs(state),
    };
  },
});
</script>

由于数据太大,需要完整数据请评论私聊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值